﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DECOR.DL.DALC.SAPC.Proxy;
using DECOR.BL.BE;
using System.Data;
using System.Text.RegularExpressions;
using System.Configuration;

namespace DECOR.DL.DALC.SAPC
{
    public class PedidoDALC : IPedidoDALC
    {
        public static PedidoDALC Instance()
        {
            if (_instance == null)
            {
                lock (typeof(PedidoDALC))
                {
                    if (_instance == null)
                    {
                        _instance = new PedidoDALC();
                    }
                }
            }
            return _instance;
        }

        private PedidoDALC() { }
        private static volatile PedidoDALC _instance = null;

        #region IPedidoDALC Members

        /// <summary>
        /// Genera una orden de servicio dependiendo de los codigos en el arreglo
        /// </summary>
        public string generarServicio(out string pNumPedido, List<string> pLstServ, List<string> pLstVisita)
        { //ZWEB_CREAR_INSTALACION
            VBAKTable T_PEDIDOS = new VBAKTable();
            VBAK vbak; string pRetVal = string.Empty;
            foreach (string item in pLstServ)
            {
                vbak = new VBAK();
                vbak.Vbeln = item;
                if (T_PEDIDOS.Count == 0)
                {
                    if (pLstVisita.Count >= 1)
                        vbak.Zzbeln1 = pLstVisita[0];// vbak.Ernam = pLstVisita[0];
                    if (pLstVisita.Count >= 2)
                        vbak.Zzbeln2 = pLstVisita[1];// vbak.Submi = pLstVisita[1];
                    if (pLstVisita.Count >= 3)
                        vbak.Zzbeln3 = pLstVisita[2];// vbak.Bstnk = pLstVisita[2];
                    if (pLstVisita.Count >= 4)
                        vbak.Zzbeln4 = pLstVisita[3];// vbak.Knumv = pLstVisita[3];
                }
                T_PEDIDOS.Add(vbak);
            }

            PedidosProxy proxy = new PedidosProxy();
            proxy.Connection = DALC.getConnection;
            try
            {
                if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            }
            catch
            {
                throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
            }
            proxy.Zweb_Crear_Instalacion(out pRetVal, out pNumPedido, ref T_PEDIDOS);
            //manejo de conexión
            SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            proxy.Connection = null;

            return pRetVal;
        }

        /// <summary>
        /// Devuelve el plan de facturación.
        /// </summary>
        public List<PlanFactBE> getPlanFact(string pNumPedido, out List<CatFactBE> pCatFact)
        {

            PedidosProxy proxy = new PedidosProxy();
            proxy.Connection = DALC.getConnection;
            try
            {
                if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            }
            catch
            {
                throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
            }
            FPLTTable t_PlanFact = new FPLTTable();
            TFPLUTable t_Tfplu = new TFPLUTable();

            proxy.Zweb_Ver_Plan_Fact(pNumPedido.PadLeft(10, '0'), ref t_PlanFact, ref t_Tfplu);
            //manejo de conexión
            SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            proxy.Connection = null;

            List<PlanFactBE> lst_PlanFact = new List<PlanFactBE>();
            List<CatFactBE> lst_CatFactBE = new List<CatFactBE>();
            bool pasa = true;

            foreach (FPLT item in t_PlanFact)
            {
                if (lst_PlanFact != null)
                    if (lst_PlanFact.Find(X => X.FPLTR.Equals(item.Fpltr)) != null)
                        pasa = false;
                if (pasa)
                {
                    PlanFactBE planFact = new PlanFactBE();

                    planFact.AFDAT = ParametroDALC.dateSapToNet(item.Afdat);
                    planFact.BONBA = item.Bonba;
                    planFact.CCACT = item.Ccact;
                    planFact.CMPRE = item.Cmpre;
                    planFact.CMPRE_FLT = item.Cmpre_Flt;
                    planFact.FAKCA = item.Fakca;
                    planFact.FAKSP = item.Faksp;
                    planFact.FAKWR = item.Fakwr;
                    planFact.FAREG = item.Fareg;
                    planFact.FKARV = item.Fkarv;
                    planFact.FKDAT = ParametroDALC.dateSapToNet(item.Fkdat);
                    planFact.FKSAF = item.Fksaf;
                    planFact.FPFIX = item.Fpfix;
                    planFact.FPLAE = item.Fplae;
                    planFact.FPLNR = item.Fplnr;
                    planFact.FPLTR = item.Fpltr;
                    planFact.FPROZ = item.Fproz;
                    planFact.FPTTP = item.Fpttp;
                    planFact.KORTE = item.Korte;
                    planFact.KURFP = item.Kurfp;
                    planFact.KURRF = item.Kurrf;
                    planFact.KZWI1 = item.Kzwi1;
                    planFact.KZWI2 = item.Kzwi2;
                    planFact.KZWI3 = item.Kzwi3;
                    planFact.KZWI4 = item.Kzwi4;
                    planFact.KZWI5 = item.Kzwi5;
                    planFact.KZWI6 = item.Kzwi6;
                    planFact.MLBEZ = item.Mlbez;
                    planFact.MLSTN = item.Mlstn;
                    planFact.NETPR = item.Netpr;
                    planFact.NETWR = item.Netwr;
                    planFact.NFDAT = ParametroDALC.dateSapToNet(item.Nfdat);
                    planFact.OFKDAT = ParametroDALC.dateSapToNet(item.Ofkdat);
                    planFact.PERIO = item.Perio;
                    planFact.PRSOK = item.Prsok;
                    planFact.SKFBP = item.Skfbp;
                    planFact.TAXK1 = item.Taxk1;
                    planFact.TAXK2 = item.Taxk2;
                    planFact.TAXK3 = item.Taxk3;
                    planFact.TAXK4 = item.Taxk4;
                    planFact.TAXK5 = item.Taxk5;
                    planFact.TAXK6 = item.Taxk6;
                    planFact.TAXK7 = item.Taxk7;
                    planFact.TAXK8 = item.Taxk8;
                    planFact.TAXK9 = item.Taxk9;
                    planFact.TEMAN = item.Teman;
                    planFact.TETXT = item.Tetxt;
                    planFact.TYPZM = item.Typzm;
                    planFact.UELNR = item.Uelnr;
                    planFact.UELTR = item.Ueltr;
                    planFact.VALDT = ParametroDALC.dateSapToNet(item.Valdt);
                    planFact.VALTG = item.Valtg;
                    planFact.WAERS = item.Waers;
                    planFact.WAVWR = item.Wavwr;
                    planFact.ZTERM = item.Zterm;

                    foreach (TFPLU item2 in t_Tfplu)
                        if (item2.Fpttp.Equals(item.Fpttp))
                        {
                            planFact.KUNRG = item2.Ttbez;
                            break;
                        }

                    lst_PlanFact.Add(planFact);
                }
            }
            pCatFact = lst_CatFactBE;
            return lst_PlanFact;
        }

        /// <summary>
        /// Devuelve el plan de facturación.
        /// </summary>
        public String setPlanFact(string pNumPedido, List<PlanFactBE> lst_PlanFact, bool esCreacion)
        {

            FPLTTable t_PlanFact = new FPLTTable();
            FPLATable t_fpla = new FPLATable();
            BAPIRET2Table t_result = new BAPIRET2Table();
            bool elimina = false;

            foreach (PlanFactBE item in lst_PlanFact)
            {
                FPLT planFact = new FPLT();
                FPLT planFactSAP = new FPLT();
                planFact.Afdat = ParametroDALC.dateNetToSap(item.AFDAT);
                planFact.Bonba = item.BONBA;
                planFact.Ccact = item.CCACT;
                planFact.Cmpre = item.CMPRE;
                planFact.Cmpre_Flt = item.CMPRE_FLT;
                planFact.Fakca = item.FAKCA;
                planFact.Faksp = item.FAKSP;
                planFact.Fakwr = item.FAKWR;
                planFact.Fareg = item.FAREG;
                planFact.Fkarv = item.FKARV;
                planFact.Fkdat = ParametroDALC.dateNetToSap(item.FKDAT);
                planFact.Fksaf = item.FKSAF;
                planFact.Fpfix = item.FPFIX;
                planFact.Fplae = item.FPLAE;
                planFact.Fplnr = item.FPLNR;
                planFact.Fpltr = item.FPLTR;
                planFact.Fproz = item.FPROZ;
                planFact.Fpttp = item.FPTTP;
                planFact.Korte = item.KORTE;
                planFact.Kurfp = item.KURFP;
                planFact.Kurrf = item.KURRF;
                planFact.Kzwi1 = item.KZWI1;
                planFact.Kzwi2 = item.KZWI2;
                planFact.Kzwi3 = item.KZWI3;
                planFact.Kzwi4 = item.KZWI4;
                planFact.Kzwi5 = item.KZWI5;
                planFact.Kzwi6 = item.KZWI6;
                planFact.Mlbez = item.MLBEZ;
                planFact.Mlstn = item.MLSTN;
                planFact.Netpr = item.NETPR;
                planFact.Netwr = item.NETWR;
                planFact.Nfdat = ParametroDALC.dateNetToSap(item.NFDAT);
                planFact.Ofkdat = ParametroDALC.dateNetToSap(item.OFKDAT);
                planFact.Perio = item.PERIO;
                planFact.Prsok = item.PRSOK;
                planFact.Skfbp = item.SKFBP;
                planFact.Taxk1 = item.TAXK1;
                planFact.Taxk2 = item.TAXK2;
                planFact.Taxk3 = item.TAXK3;
                planFact.Taxk4 = item.TAXK4;
                planFact.Taxk5 = item.TAXK5;
                planFact.Taxk6 = item.TAXK6;
                planFact.Taxk7 = item.TAXK7;
                planFact.Taxk8 = item.TAXK8;
                planFact.Taxk9 = item.TAXK9;
                planFact.Teman = item.TEMAN;
                planFact.Tetxt = item.TETXT;
                planFact.Typzm = item.TYPZM;
                planFact.Uelnr = item.UELNR;
                planFact.Ueltr = item.UELTR;
                planFact.Valdt = ParametroDALC.dateNetToSap(item.VALDT);
                planFact.Valtg = item.VALTG;
                planFact.Waers = item.WAERS;
                planFact.Wavwr = item.WAVWR;
                planFact.Zterm = item.ZTERM;

                planFactSAP.Afdat = ParametroDALC.dateNetToSap(item.AFDAT);
                planFactSAP.Bonba = item.BONBA;
                planFactSAP.Ccact = item.CCACT;
                planFactSAP.Cmpre = item.CMPRE;
                planFactSAP.Cmpre_Flt = item.CMPRE_FLT;
                planFactSAP.Fakca = item.FAKCA;
                planFactSAP.Faksp = item.FAKSP;
                planFactSAP.Fakwr = item.FAKWR;
                planFactSAP.Fareg = item.FAREG;
                planFactSAP.Fkarv = item.FKARV;
                planFactSAP.Fkdat = ParametroDALC.dateNetToSap(item.FKDAT);
                planFactSAP.Fksaf = "";
                planFactSAP.Fpfix = item.FPFIX;
                planFactSAP.Fplae = item.FPLAE;
                planFactSAP.Fplnr = item.FPLNR;
                planFactSAP.Fpltr = item.FPLTR;
                planFactSAP.Fproz = item.FPROZ;
                planFactSAP.Fpttp = item.FPTTP;
                planFactSAP.Korte = item.KORTE;
                planFactSAP.Kurfp = item.KURFP;
                planFactSAP.Kurrf = item.KURRF;
                planFactSAP.Kzwi1 = item.KZWI1;
                planFactSAP.Kzwi2 = item.KZWI2;
                planFactSAP.Kzwi3 = item.KZWI3;
                planFactSAP.Kzwi4 = item.KZWI4;
                planFactSAP.Kzwi5 = item.KZWI5;
                planFactSAP.Kzwi6 = item.KZWI6;
                planFactSAP.Mlbez = item.MLBEZ;
                planFactSAP.Mlstn = item.MLSTN;
                planFactSAP.Netpr = item.NETPR;
                planFactSAP.Netwr = item.NETWR;
                planFactSAP.Nfdat = ParametroDALC.dateNetToSap(item.NFDAT);
                planFactSAP.Ofkdat = ParametroDALC.dateNetToSap(item.OFKDAT);
                planFactSAP.Perio = item.PERIO;
                planFactSAP.Prsok = item.PRSOK;
                planFactSAP.Skfbp = item.SKFBP;
                planFactSAP.Taxk1 = item.TAXK1;
                planFactSAP.Taxk2 = item.TAXK2;
                planFactSAP.Taxk3 = item.TAXK3;
                planFactSAP.Taxk4 = item.TAXK4;
                planFactSAP.Taxk5 = item.TAXK5;
                planFactSAP.Taxk6 = item.TAXK6;
                planFactSAP.Taxk7 = item.TAXK7;
                planFactSAP.Taxk8 = item.TAXK8;
                planFactSAP.Taxk9 = item.TAXK9;
                planFactSAP.Teman = item.TEMAN;
                planFactSAP.Tetxt = item.TETXT;
                planFactSAP.Typzm = item.TYPZM;
                planFactSAP.Uelnr = item.UELNR;
                planFactSAP.Ueltr = item.UELTR;
                planFactSAP.Valdt = ParametroDALC.dateNetToSap(item.VALDT);
                planFactSAP.Valtg = item.VALTG;
                planFactSAP.Waers = item.WAERS;
                planFactSAP.Wavwr = item.WAVWR;
                planFactSAP.Zterm = item.ZTERM;

                t_PlanFact.Add(planFact);
                t_PlanFact.Add(planFactSAP);

                if (item.TAXK1.Equals("D") && !elimina) elimina = true;
            }



            PedidosProxy proxy = new PedidosProxy();
            proxy.Connection = DALC.getConnection;
            try
            {
                if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            }
            catch
            {
                throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
            }

            proxy.Zweb_Grabar_Plan_Fact(pNumPedido.PadLeft(10, '0'), ref t_fpla, ref t_PlanFact, ref t_result);
            if (!esCreacion && elimina)
                proxy.Zweb_Grabar_Plan_Fact(pNumPedido.PadLeft(10, '0'), ref t_fpla, ref t_PlanFact, ref t_result);
            //manejo de conexión
            SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            proxy.Connection = null;

            return "";
        }

        /// <summary>
        /// Devuelve las glosas tanto por materiales o por jerarquía.
        /// </summary>
        //public List<GlosaBE> glosasCotizacion(List<string> pLstMat,DateTime fecha)
        public List<GlosaBE> glosasCotizacion(string numPedido) //rgutierrez 18.11.2011
        {
            ParametrosProxy proxy = new ParametrosProxy();
            proxy.Connection = DALC.getConnection;
            try
            {
                if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            }
            catch
            {
                throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
            }

            //rgutierrez 18.11.2011
            //ZWEB_COTGLOSATable t_criterio = new ZWEB_COTGLOSATable();;
            //ZWEB_COTGLOSATable t_glosa = new ZWEB_COTGLOSATable();
            //foreach (string item in pLstMat)
            //{
            //    ZWEB_COTGLOSA item_criterio = new ZWEB_COTGLOSA();
            //    item_criterio.Matnr = item.PadLeft(18,'0');
            //    item_criterio.Finicio = ParametroDALC.dateNetToSap(fecha);
            //    t_criterio.Add(item_criterio);
            //}
            //proxy.Zweb_Leer_Glosacotizacion(ref t_criterio, ref t_glosa);
            //proxy.Zweb_Leer_Glosacotizacion(numPedido, ref t_glosa);
            string glosas;
            proxy.Zweb_Leer_Glosacotizacion(numPedido, out glosas);

            //manejo de conexión
            //SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            //proxy.Connection = null;

            List<GlosaBE> l_glosas = new List<GlosaBE>();

            //rgutierrez 28.12.2011
            //foreach (ZWEB_COTGLOSA itemZ in t_glosa)
            foreach (string glosa in glosas.Split('|'))
            {
                GlosaBE item = new GlosaBE();
                //item.codJerarquia = itemZ.Prodh;
                //item.codMaterial = itemZ.Matnr;
                //item.fFin = ParametroDALC.dateSapToNet(itemZ.Ffin);
                //item.fInicio = ParametroDALC.dateSapToNet(itemZ.Finicio);
                //item.glosa = itemZ.Glosa.Trim() + itemZ.Glosa2.Trim(); //rgutierrez 18.11.2011
                //item.glosa = itemZ.Gloza.Trim();
                item.glosa = glosa;
                l_glosas.Add(item);
            }

            #region conn3 prueba
            /*
                    //- uso del conector
                    try
                    {
                        RfcDestinationManager.RegisterDestinationConfiguration(new MyBackendConfig());
                    }
                    catch (Exception eee) { }

                    RfcDestination prd = RfcDestinationManager.GetDestination("PRD_000");

                    RfcRepository rep = prd.Repository;
                    IRfcFunction function = null;
                    
                    try
                    {
                        function = prd.Repository.CreateFunction("ZWEB_LEER_GLOSACOTIZACION");

                        irfc tabla = prd.Repository.GetStructureMetadata("ZWEB_COTGLOSA");

                        function.SetValue("T_CRITERIO", tabla);
                        function.Invoke(prd);

                    }
                    catch (RfcBaseException ee)
                    {
                    }

                        
                    //------------------------------------------------------------
                    IRfcTable t_glosa = function.GetTable("T_GLOSA");
                    //Iterate over all rows in the table COMPANYCODE_LIST
                    for (int i = 0; i < t_glosa.RowCount; i++)
                    {
                        GlosaBE glosa = new GlosaBE();
                        glosa.codJerarquia = t_glosa.GetString("PRODH");
                        glosa.codMaterial = t_glosa.GetString("MATNR");
                        glosa.glosa = t_glosa.GetString("GLOZA");
                        glosa.fFin =DateTime.Parse( t_glosa.GetString("FFIN"));
                        glosa.fInicio = DateTime.Parse( t_glosa.GetString("FINICIO"));

                        lstGlosa.Add(glosa);
                    }
             */
            #endregion

            //List<GlosaBE> listnuevaGlosa = new List<GlosaBE>();
            ////**********************************************************************
            ////rhuapaya 13.02.2012
            //string saltoL = ConfigurationManager.AppSettings["saltoLinea"];
            //foreach (var item in l_glosas)
            //{
            //    string[] cadena = Regex.Split(item.glosa, saltoL);
            //    foreach (string msg in cadena)
            //    {
            //        GlosaBE objGlosa = new GlosaBE();
            //        objGlosa.glosa = msg;
            //        listnuevaGlosa.Add(objGlosa);
            //    }
            //}

            return l_glosas;
        }

        //rgutierrez 27.01.2012 Ya no va
        //public List<GlosaBE> ObtenerGlosasA4(string numPedido)
        //{
        //    ParametrosProxy proxy = new ParametrosProxy();
        //    proxy.Connection = DALC.getConnection;
        //    try
        //    {
        //        if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
        //    }
        //    catch
        //    {
        //        throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
        //    }

        //    string glosas;
        //    proxy.Zweb_Glosas_A4(numPedido, out glosas);

        //    List<GlosaBE> l_glosas = new List<GlosaBE>();

        //    foreach (string glosa in glosas.Split('|'))
        //    {
        //        GlosaBE item = new GlosaBE();
        //        item.glosa = glosa;
        //        l_glosas.Add(item);
        //    }

        //    return l_glosas;
        //}

        /// <summary>
        /// crea el doc. comercial especificado pedido / oferta / NC
        /// </summary>
        /// <param name="pNumPedido">Número de pedido creado</param>
        /// <param name="pObjPedido">Información para crear el pedido</param>
        /// <returns>mensaje de resultado</returns>
        public string procesarPedido(out string pNumPedido, PedidoBE pObjPedido)
        {
            BAPISDHD1 Order_Header_In = new BAPISDHD1();
            Order_Header_In.Doc_Type = pObjPedido.CodTipoDoc;
            Order_Header_In.Purch_No_C = pObjPedido.OrdenCompra;


            Order_Header_In.Sales_Org = pObjPedido.OrgVentas;
            Order_Header_In.Distr_Chan = pObjPedido.CanalDist;
            Order_Header_In.Division = pObjPedido.Sector;
            Order_Header_In.Sales_Grp = pObjPedido.CodGrupoVend;
            Order_Header_In.Sales_Off = pObjPedido.CodOficina;

            //Order_Header_In.Req_Date_H = ParametroDALC.dateNetToSap(pObjPedido.FechaEntrega);
            Order_Header_In.Req_Date_H = ParametroDALC.dateNetToSap(DateTime.Today);
            Order_Header_In.Doc_Date = ParametroDALC.dateNetToSap(DateTime.Today);

            Order_Header_In.Ship_Cond = pObjPedido.CondExp;
            Order_Header_In.Dlv_Block = pObjPedido.BloqueoEntrega;
            Order_Header_In.Bill_Block = pObjPedido.BloqueoFactura;

            Order_Header_In.Cstcndgrp1 = pObjPedido.GrupoCond;
            Order_Header_In.Ord_Reason = pObjPedido.Motivo;

            Order_Header_In.Pmnttrms = pObjPedido.CondPago;
            Order_Header_In.Currency = pObjPedido.Moneda;
            Order_Header_In.Po_Method = pObjPedido.ClasePedidoCliente; //rgutierrez 15.12.2011

            //INICIO VISITAS: mtejada 09.09.2011
            Order_Header_In.H_Curr = pObjPedido.TipoVisita;
            if (pObjPedido.Reenbolsable) { Order_Header_In.Calc_Motive = "X"; }
            //FIN VISITAS: mtejada 09.09.2011

            //rhuapaya 14.02.2012
            Order_Header_In.Purch_No_S = pObjPedido.nomProyecto;

            //agregar campo cod proyecto y cod de version
            Order_Header_In.Rec_Point = pObjPedido.codProyecto;
            Order_Header_In.Fkk_Conacct = pObjPedido.codVersion;


            //rhuapaya 15.06.2012
            Order_Header_In.Ref_1 = pObjPedido.NumPedido;
            //--- Campos Zs Servicios
            if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodPedServ"))
            {
                Order_Header_In.Add_Val_Dy = pObjPedido.Znpiso;
                if (!ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodNCND")) //@@@@@ rhuapaya 16.08.2012
                {
                    Order_Header_In.Tax_Class9 = pObjPedido.Zasensor ? "X" : "";
                    Order_Header_In.Tax_Class8 = pObjPedido.Ztransporte;//F,FE,I,E    
                }
            }
            //-------------------

            //Número de pedido que se genera:
            string ex_Salesdocument = "";
            BAPISDITMTable ref_Order_items_in = new BAPISDITMTable();
            BAPISCHDLTable ref_Order_schedule_in = new BAPISCHDLTable();
            BAPICONDTable ref_Order_conditions_in = new BAPICONDTable();

            decimal totaldesc = 0;
            foreach (DetalleBE itm in pObjPedido.Detalle)
            {
                string numVal = itm.Posicion;

                BAPISDITM i = new BAPISDITM();
                i.Itm_Number = numVal;
                i.Material = itm.CodMaterial.PadLeft(18, '0');
                i.Plant = itm.CodCentro;

                if (!ParametroDALC.esTipoX(pObjPedido.CodTipoDoc.Trim().ToUpper(), "PedSinAlm"))
                    i.Store_Loc = itm.CodAlmacen;
                else
                    itm.CodAlmacen = string.Empty;

                if (!ParametroDALC.esTipoX(pObjPedido.CodTipoDoc.Trim().ToUpper(), "CodSinLote"))
                    i.Batch = itm.CodLote;
                else
                    itm.CodLote = string.Empty;

                //i.Target_Qu = itm.CodUMedida;
                i.Dlv_Prio = itm.PrioridadEntrega;
                i.Prc_Group1 = itm.CodGrupoMat;
                i.Reason_Rej = itm.MotivoRechazo;
                i.Short_Text = itm.DescMaterial;
                //---
                i.Currency = pObjPedido.Moneda;
                //--- campos Zs Servicios
                i.Tax_Class9 = itm.Zservicio ? "X" : "";

                //si es tipopos cabecera Combo, busca los hijos para cambiar reparto, grp mat, 
                if (ParametroDALC.esTipoCabComboStatic(itm.TipoPosicion))
                {
                    List<DetalleBE> lstAux = pObjPedido.Detalle.FindAll(X => X.PosSup == itm.Posicion);
                    foreach (DetalleBE itmAux in lstAux)
                    {
                        itmAux.Cantidad = itmAux.CantComp * itm.Cantidad;
                        //si UM = UNidad => redondear al entero mayor
                        if (ParametroDALC.esTipoX(itmAux.CodUMedida, "UMUnidad"))
                        {
                            itmAux.Cantidad = (itmAux.Cantidad > decimal.Truncate(itmAux.Cantidad)) ? decimal.Truncate(itmAux.Cantidad) + 1 : itmAux.Cantidad;
                        }
                        itmAux.CodGrupoMat = itm.CodGrupoMat;
                        //itmAux.FechaEntrega = itm.FechaEntrega;
                        itmAux.PrioridadEntrega = itm.PrioridadEntrega;
                    }
                }

                //--- tipo de posición
                if (ParametroDALC.esTipoCabComboStatic(itm.TipoPosicion) ||
                    ParametroDALC.esTipoCabKitStatic(itm.TipoPosicion) ||
                    ParametroDALC.esTipoPosComboStatic(itm.TipoPosicion) ||
                    itm.TipoPosicion == "ZE10" || (itm.Material.TipoMaterial.Equals("NA3")) ||
                    itm.TipoPosicion == "Z010") //-- Cambiar TipoPosición según tipo de material NA1, NA2, NA3 :: Requerimiento 06.04.2011
                {
                    if (!ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodNCND"))//si no es NC ó ND
                    {
                        i.Item_Categ = itm.TipoPosicion;
                    }
                }
                i.Hg_Lv_Item = itm.PosSup;
                i.Comp_Quant = itm.CantComp;

                //validación de documento de transporte:
                if (pObjPedido.CodTipoDoc == ParametroDALC.getParamValueStatic("CodTransporte"))
                {
                    i.Target_Qty = 1000m;
                    i.Net_Weight = itm.Cantidad;
                    i.Gross_Wght = itm.Cantidad;
                    i.Untof_Wght = "KG";
                }
                else if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodNCND"))
                {
                    i.Target_Qty = Convert.ToDecimal(itm.Cantidad);//sin 3 decimales cuando es NC/ND
                }
                else
                {
                    i.Target_Qty = Convert.ToDecimal(itm.Cantidad) * 1000;//3 decimales SIN separador
                }

                //--- schedule / vbep / repartos
                BAPISCHDL iosi;
                foreach (RepartoBE itmRep in itm.Repartos)
                {
                    if (itmRep.CantPed > 0m)
                    {
                        iosi = new BAPISCHDL();
                        iosi.Itm_Number = numVal;
                        iosi.Sched_Line = itmRep.Pos;
                        if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodReserva"))
                        {
                            itmRep.FechaEntrega = pObjPedido.Fecha.AddDays(Convert.ToDouble(ParametroDALC.getParamValueStatic("ValidezReserva")));
                        }
                        iosi.Req_Date = ParametroDALC.dateNetToSap(itmRep.FechaEntrega);

                        //validación de documento de transporte:
                        if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodTransporte"))
                        {
                            iosi.Req_Qty = 1m;
                        }
                        else
                        {
                            iosi.Req_Qty = itmRep.CantPed;
                        }

                        if (!ParametroDALC.esTipoX(itm.TipoPosicion, "TipoPosCombo"))
                        {
                            ref_Order_schedule_in.Add(iosi);
                        }
                    }
                }

                //no agregar las posiciones que tienen pos superior (kit / combo) xq SAP los agrega
                //if ((string.IsNullOrEmpty(itm.PosSup) || itm.PosSup == "000000"))
                {
                    ref_Order_items_in.Add(i);
                    //ref_Order_schedule_in.Add(iosi);
                }

                //Lista de Dctos:
                #region Tabla de condiciones
                BAPICOND icond;
                totaldesc = 0;
                //cargamos la condicion a la cabecera, si en caso hay descuento @@@
                //bool haydsctoadicional = false;
                ////if (haydsctoadicional)
                ////{
                //    icond = new BAPICOND();
                //    icond.Cond_Type = "ZD12";
                //    icond.Condcoinhd = "1";
                //    icond.Condvalue = 5.0m;
                //    ref_Order_conditions_in.Add(icond);
                ////}

                if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodNCZP01"))
                {
                    if (itm.Diferencia.Importe != 0m) //---- enviar la condición de Diferencia para NC x dif precio
                    {
                        icond = new BAPICOND();
                        icond.Itm_Number = numVal;
                        icond.Cond_Type = itm.Diferencia.Condicion;
                        icond.Cond_Value = itm.Diferencia.Importe * .1m;
                        //icond.Currency = pObjPedido.Moneda;
                        ref_Order_conditions_in.Add(icond);
                    }
                    else
                    {// Si no hay cond ZP01 ingresada, se toma el valor de la ZP00
                        icond = new BAPICOND();
                        icond.Itm_Number = numVal;
                        //totaldesc = Math.Abs(itm.DctoAdicionalPorc.Importe) +Math.Abs( itm.DctoDecorMonto.Importe) + Math.Abs(itm.DctoDecorPorc.Importe) +
                        //            Math.Abs(itm.DctoEstadisticoPorc.Importe) + Math.Abs(itm.DctoGenerico.Importe) + Math.Abs(itm.DctoGerenciaMonto.Importe) +
                        //            Math.Abs(itm.DctoGerenciaPorc.Importe) + Math.Abs(itm.DctoZD06.Importe) + Math.Abs(itm.DctoZD07.Importe) +
                        //            Math.Abs(itm.DctoZD11.Importe);
                        totaldesc = Math.Abs(itm.DctoAdicionalPorc.Valor) + Math.Abs(itm.DctoDecorMonto.Valor) + Math.Abs(itm.DctoDecorPorc.Valor) +
                                    Math.Abs(itm.DctoEstadisticoPorc.Valor) + Math.Abs(itm.DctoGenerico.Valor) + Math.Abs(itm.DctoGerenciaMonto.Valor) +
                                    Math.Abs(itm.DctoGerenciaPorc.Valor) + Math.Abs(itm.DctoZD06.Valor) + Math.Abs(itm.DctoZD07.Valor) +
                                    Math.Abs(itm.DctoZD11.Valor) + Math.Abs(itm.DctoGenericoZD08.Valor); //@@@@@ se adicionó la ZD08 13.08.2012
                        icond.Cond_Type = itm.Diferencia.Condicion;
                        //icond.Cond_Value = (itm.Precio.Importe * itm.Cantidad - (totaldesc / 100) * itm.Precio.Importe * itm.Cantidad) * .1m;
                        icond.Cond_Value = itm.Precio.Valor - totaldesc;
                        icond.Cond_Value = icond.Cond_Value / 10; // es por la configuracion de ZP01(Importe/%)
                        if (itm.Material != null)
                        {
                            if (itm.Material.EspecialServ)
                            {
                                icond.Cond_Value = itm.PreZP08.Importe * .1m;
                            }
                            //else
                            //{
                            //    icond.Cond_Value = itm.PreZP08.Importe * .1m;
                            //}
                        }
                        else if (itm.PreZP08 != null)
                        {
                            if (itm.PreZP08.Importe != 0m)
                            {
                                icond.Cond_Value = itm.PreZP08.Importe * .1m;
                            }
                        }
                        //icond.Currency = pObjPedido.Moneda;
                        ref_Order_conditions_in.Add(icond);
                    }
                }
                else if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodPedServ"))
                {
                    if (itm.DctoZD06.Importe != 0m)
                    {
                        icond = new BAPICOND();
                        icond.Itm_Number = numVal;
                        icond.Cond_Type = itm.DctoZD06.Condicion;
                        icond.Cond_Value = itm.DctoZD06.Importe;
                        ref_Order_conditions_in.Add(icond);
                    }
                    if (itm.DctoZD07.Importe != 0m)
                    {
                        icond = new BAPICOND();
                        icond.Itm_Number = numVal;
                        icond.Cond_Type = itm.DctoZD07.Condicion;
                        icond.Cond_Value = itm.DctoZD07.Importe;
                        ref_Order_conditions_in.Add(icond);
                    }
                    if (itm.PreZP08.Importe != 0m)
                    {
                        icond = new BAPICOND();
                        icond.Itm_Number = numVal;
                        icond.Cond_Type = itm.PreZP08.Condicion;
                        icond.Cond_Value = itm.PreZP08.Importe * .1m;
                        ref_Order_conditions_in.Add(icond);
                    }
                }
                else
                {
                    if (itm.DctoDecorPorc.Importe != 0m)
                    {
                        icond = new BAPICOND();
                        icond.Itm_Number = numVal;
                        icond.Cond_Type = itm.DctoDecorPorc.Condicion;
                        icond.Cond_Value = itm.DctoDecorPorc.Importe;
                        //icond.Currency = pObjPedido.Moneda;
                        ref_Order_conditions_in.Add(icond);
                    }

                    if (itm.DctoAdicionalPorc.Importe != 0m)
                    {
                        icond = new BAPICOND();
                        icond.Itm_Number = numVal;
                        icond.Cond_Type = itm.DctoAdicionalPorc.Condicion;
                        icond.Cond_Value = itm.DctoAdicionalPorc.Importe;
                        //icond.Currency = pObjPedido.Moneda;
                        ref_Order_conditions_in.Add(icond);
                    }
                    if (itm.DctoEstadisticoPorc.Importe != 0m)
                    {
                        icond = new BAPICOND();
                        icond.Itm_Number = numVal;
                        icond.Cond_Type = itm.DctoEstadisticoPorc.Condicion;
                        icond.Cond_Value = itm.DctoEstadisticoPorc.Importe;
                        //icond.Currency = pObjPedido.Moneda;
                        ref_Order_conditions_in.Add(icond);
                    }

                    if (itm.DctoGerenciaPorc.Importe != 0m)
                    {
                        icond = new BAPICOND();
                        icond.Itm_Number = numVal;
                        icond.Cond_Type = itm.DctoGerenciaPorc.Condicion;
                        icond.Cond_Value = itm.DctoGerenciaPorc.Importe;
                        //icond.Currency = pObjPedido.Moneda;
                        ref_Order_conditions_in.Add(icond);
                    }
                    if (itm.DctoGerenciaMonto.Importe != 0m)
                    {
                        icond = new BAPICOND();
                        icond.Itm_Number = numVal;
                        icond.Cond_Type = itm.DctoGerenciaMonto.Condicion;
                        icond.Cond_Value = itm.DctoGerenciaMonto.Importe * .1m;
                        //icond.Currency = pObjPedido.Moneda;
                        ref_Order_conditions_in.Add(icond);
                    }
                    if (itm.DctoGenerico.Importe != 0m)
                    {
                        icond = new BAPICOND();
                        icond.Itm_Number = numVal;
                        icond.Cond_Type = itm.DctoGenerico.Condicion;
                        icond.Cond_Value = itm.DctoGenerico.Importe;
                        ref_Order_conditions_in.Add(icond);
                    }
                    if (itm.DctoZD11.Importe != 0m)
                    {
                        icond = new BAPICOND();
                        icond.Itm_Number = numVal;
                        icond.Cond_Type = ParametroDALC.getParamValueStatic("CondZD11");
                        icond.Cond_Value = itm.DctoZD11.Importe; //rgutierrez 15.12.2011
                        ref_Order_conditions_in.Add(icond);
                    }
                    if (itm.DsctoAdicionalZD12.Importe != 0m) //rhuapaya 25.06.2012 @@@
                    {
                        icond = new BAPICOND();
                        icond.Itm_Number = numVal;
                        icond.Cond_Type = ParametroDALC.getParamValueStatic("CondDctosAdicional");
                        icond.Cond_Value = itm.DsctoAdicionalZD12.Importe;
                        ref_Order_conditions_in.Add(icond);
                    }
                }
                #endregion
            }

            BAPIPARNRTable ref_Order_partners = new BAPIPARNRTable();
            BAPIADDR1Table ref_partneraddresses = new BAPIADDR1Table();

            BAPIPARNR iop = new BAPIPARNR();
            BAPIADDR1 paddr = new BAPIADDR1();

            //-- corregir interlocutores para Cliente Eventual
            ClienteDALC objClienteDALC = ClienteDALC.Instance();
            ClienteBE objClienteBE = objClienteDALC.leer(pObjPedido.CodCliente);


            if (objClienteBE != null && objClienteBE.Eventual)
            {
                InterlocutorBE objSolicitante = pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocCliente"); });
                //validando que el cliente eventual tenga un ruc @@@@ rhuapaya 30.07.2012
                if (objSolicitante.Cliente.Ruc == null || objSolicitante.Cliente.Ruc.Trim() == "")
                {
                    throw new Exception("El cliente necesita un número de RUC");
                }

            }
            //-----------------------------           
            string pRefDocCat = string.Empty;
            //-- CREACIÓN CON REFERENCIA
            if (pObjPedido.NumPedido != "" && pObjPedido.NumPedido != "0000000000")
            {
                //--- se asume q siempre trae kit/combo (para evitar el error de creación con items hijos)
                pObjPedido.TieneKitCombo = true;
                //--- factura
                if (Convert.ToInt64(pObjPedido.NumPedido) >= 90000000)
                {
                    //--- solo si se crea una NC/ND
                    if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodNCND"))
                    {
                        //añadir referencia:
                        Order_Header_In.Ref_Doc_L = pObjPedido.Referencia;
                        Order_Header_In.Refdoc_Cat = "M";
                    }
                    else
                    {
                        throw new Exception(ParametroDALC.getParamValueStatic("msgTDocRefInv"));
                    }
                }
                //--- NC/ND
                //if (Convert.ToInt64(pObjPedido.NumPedido) >= 60000000)
                //{
                //    PedidoBE objTmp = this.leer(pObjPedido.NumPedido);
                //    //--- solo si se crea una NC/ND
                //    if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodNCND"))
                //    {
                //        Order_Header_In.Refdoc_Cat = "M";
                //    }
                //    else
                //    {
                //        throw new Exception(ParametroDALC.getParamValueStatic("msgTDocRefInv"));
                //    }
                //}
                //--- oferta
                else if (Convert.ToInt64(pObjPedido.NumPedido) >= 20000000)
                {
                    //--- solo si no es NC/ND
                    if (!ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodNCND"))
                    {
                        Order_Header_In.Refdoc_Cat = "B";
                    }
                    else
                    {
                        throw new Exception(ParametroDALC.getParamValueStatic("msgTDocInvNCND"));
                    }
                }
                //--- pedido
                else
                {
                    //--- solo si no es NC/ND
                    if (!ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodNCND"))
                    {
                        Order_Header_In.Refdoc_Cat = "C";
                    }
                    else
                    {
                        throw new Exception(ParametroDALC.getParamValueStatic("msgTDocInvNCND"));
                    }
                }
                Order_Header_In.Ref_Doc = pObjPedido.NumPedido;

                //--- @Fix creación con referencia por posición (para NC)
                //rhuapaya 27.06.2012 @@@ se cambio a CodConRef por CodRefPos, es decir para que todos los que son por referencia
                if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodConRef"))
                {
                    foreach (BAPISDITM itm in ref_Order_items_in)
                    {
                        itm.Ref_Doc = pObjPedido.NumPedido;
                        itm.Ref_Doc_It = itm.Itm_Number;
                    }
                }

                //20110713 Inicio - WCA
                if (objClienteBE != null && objClienteBE.Eventual)
                {
                    InterlocutorBE objV1 = pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocVendedor1"); });
                    InterlocutorBE objV2 = pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocVendedor2"); });
                    InterlocutorBE objV3 = pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocVendedor3"); });
                    InterlocutorBE objV4 = pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocVendedor4"); });
                    bool res = false;
                    if (objV1 != null)
                    {
                        //rgutierrez 12.01.2012
                        res = pObjPedido.Interlocutores.Remove(objV1);
                        objV1.Funcion = ParametroDALC.getParamValueStatic("IlocVendedor1");
                        pObjPedido.Interlocutores.Add(objV1);

                    }
                    if (objV2 != null)
                    {
                        //rgutierrez 12.01.2012
                        res = pObjPedido.Interlocutores.Remove(objV2);
                        objV2.Funcion = ParametroDALC.getParamValueStatic("IlocVendedor2");
                        pObjPedido.Interlocutores.Add(objV2);
                        //if (objV1 != null)
                        //    if (objV2.Persona.CodPersona.Trim('0').Equals(objV1.Persona.CodPersona.Trim('0')))
                        //    {
                        //        res = pObjPedido.Interlocutores.Remove(objV2);
                        //        objV2.Funcion = ParametroDALC.getParamValueStatic("IlocVendedor1");
                        //        pObjPedido.Interlocutores.Add(objV2);
                        //    }
                    }
                    if (objV3 != null)
                    {
                        res = pObjPedido.Interlocutores.Remove(objV3);
                        objV3.Funcion = ParametroDALC.getParamValueStatic("IlocVendedor3"); //rgutierrez 12.01.2012
                        //objV3.Funcion = ParametroDALC.getParamValueStatic("IlocVendedor2");
                        pObjPedido.Interlocutores.Add(objV3);
                    }
                    if (objV4 != null)
                    {
                        res = pObjPedido.Interlocutores.Remove(objV4);
                        objV4.Funcion = ParametroDALC.getParamValueStatic("IlocVendedor4"); //rgutierrez 12.01.2012
                        //objV4.Funcion = ParametroDALC.getParamValueStatic("IlocVendedor3");
                        pObjPedido.Interlocutores.Add(objV4);
                    }
                }
                //20110713 Fin

            }
            else
            {
                //modificar los interlocutores de venta para los clientes eventuales
                if (objClienteBE != null && objClienteBE.Eventual)
                {
                    InterlocutorBE objV1 = pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocVendedor1"); });
                    InterlocutorBE objV2 = pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocVendedor2"); });
                    InterlocutorBE objV3 = pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocVendedor3"); });
                    InterlocutorBE objV4 = pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocVendedor4"); });
                    bool res = false;
                    if (objV1 != null)
                    {
                        res = pObjPedido.Interlocutores.Remove(objV1);

                        //rgutierrez 12.01.2012
                        objV1.Funcion = ParametroDALC.getParamValueStatic("IlocVendedor1");
                        pObjPedido.Interlocutores.Add(objV1);
                    }
                    if (objV2 != null)
                    {
                        res = pObjPedido.Interlocutores.Remove(objV2);
                        objV2.Funcion = ParametroDALC.getParamValueStatic("IlocVendedor2"); //rgutierrez 12.01.2012
                        //objV2.Funcion = ParametroDALC.getParamValueStatic("IlocVendedor1");
                        pObjPedido.Interlocutores.Add(objV2);
                    }
                    if (objV3 != null)
                    {
                        res = pObjPedido.Interlocutores.Remove(objV3);
                        objV3.Funcion = ParametroDALC.getParamValueStatic("IlocVendedor3"); //rgutierrez 12.01.2012
                        //objV3.Funcion = ParametroDALC.getParamValueStatic("IlocVendedor2");
                        pObjPedido.Interlocutores.Add(objV3);
                    }
                    if (objV4 != null)
                    {
                        res = pObjPedido.Interlocutores.Remove(objV4);
                        objV4.Funcion = ParametroDALC.getParamValueStatic("IlocVendedor4"); //rgutierrez 12.01.2012
                        //objV4.Funcion = ParametroDALC.getParamValueStatic("IlocVendedor3");
                        pObjPedido.Interlocutores.Add(objV4);
                    }
                }
            }

            //recorremos ref_Order_items_in (cambio visto por Yanina Castro "ycastro")
            //rhuapaya 26.06.2012 @@@
            if (ref_Order_items_in != null || ref_Order_items_in.Count > 0)
            {
                foreach (BAPISDITM item in ref_Order_items_in)
                {
                    if (Order_Header_In.Refdoc_Cat != "")
                    {
                        item.Ref_Doc_Ca = Order_Header_In.Refdoc_Cat;
                    }
                }
            }
            //------------------------------------------------
            string mail = "";
            int cont = 0; //rgutierrez 01.12.2011
            string linkAddress = ""; //rgutierrez 06.12.2011
            foreach (InterlocutorBE objInter in pObjPedido.Interlocutores)
            {
                iop = null; paddr = null;
                if (objInter.Cliente.Mail != null)
                {
                    if (!objInter.Cliente.Mail.Equals(""))
                    {
                        mail = objInter.Cliente.Mail;
                        objInter.Cliente.Mail = string.Empty;
                    }
                }

                if (ParametroDALC.esTipoX(objInter.Funcion, "IlocEmpresa"))
                {
                    if (!string.IsNullOrEmpty(objInter.Cliente.Codigo))
                    {
                        iop = new BAPIPARNR();
                        iop.Partn_Role = objInter.Funcion;
                        iop.Partn_Numb = objInter.Cliente.Codigo;
                        if (ParametroDALC.esTipoX(objInter.Funcion, "IlocCliente"))
                        {
                            InterlocutorBE objRestmp = pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocResPago"); });
                            //Po_Box_Lobby se usa para asignar un nif de solicitante y nif responsable pago
                            iop.Unload_Pt = objInter.Cliente.Ruc.Trim() + "|" + objRestmp.Cliente.Ruc.Trim();
                        }
                        #region
                        //if (objInter.Funcion.Equals(ParametroDALC.getParamValueStatic("IlocCliente")))// && !objInter.Cliente.Mail.Equals(""))
                        //{
                        //    ////iop.Langu = "S";
                        //    ////iop.Addr_Link = "$0001";
                        //    //--- falta tabla para mails...
                        //    paddr = new BAPIADDR1();
                        //    ////paddr.Addr_No = "$0001";
                        //    //paddr.E_Mail = objInter.Cliente.Mail;
                        //    paddr.Name = objInter.Cliente.Descripcion.Length > 35 ? objInter.Cliente.Descripcion.Substring(0, 35) : objInter.Cliente.Descripcion;
                        //    paddr.City = objInter.Cliente.Ciudad.Trim();
                        //    paddr.District = objInter.Cliente.Distrito.Trim();
                        //    paddr.Postl_Cod1 = objInter.Cliente.CodigoPostal.Trim();
                        //    paddr.Street = objInter.Cliente.Direccion.Trim();
                        //    paddr.Country = objInter.Cliente.Pais.Trim();
                        //    paddr.Langu = "ES";
                        //    paddr.Tel1_Numbr = objInter.Cliente.Telefono.Trim();
                        //    //paddr.Fax_Number =objInter.Cliente.  no hay datos para esto
                        //}
                        #endregion

                        if (!objInter.Funcion.Equals(ParametroDALC.getParamValueStatic("IlocAgTrans")))
                        {
                            //rgutierrez 16.11.2011
                            //iop.Name = objInter.Cliente.Descripcion.Length > 35 ? objInter.Cliente.Descripcion.Substring(0, 35) : objInter.Cliente.Descripcion;
                            //iop.Name_2 = objInter.Cliente.Descripcion.Length > 35 ? objInter.Cliente.Descripcion.Substring(35) : "";
                            List<string> nombres = new List<string>(Regex.Split(objInter.Cliente.Descripcion, @"(?<=\G.{35})"));
                            iop.Name = nombres[0];
                            iop.Name_2 = nombres.Count > 1 ? nombres[1] : "";
                            iop.Name_3 = nombres.Count > 2 ? nombres[2] : "";
                            iop.Name_4 = nombres.Count > 3 ? nombres[3] : "";

                            iop.Street = objInter.Cliente.Direccion;
                            iop.Postl_Code = objInter.Cliente.CodigoPostal;
                            iop.Telephone = objInter.Cliente.Telefono;
                            //--------------------------------
                            iop.City = objInter.Cliente.Ciudad;
                            //--------------------------------
                            iop.Title = ParametroDALC.getParamValueStatic("Tratamiento");
                            iop.Langu = "S";

                            //--- falta tabla para mails...
                            //       paddr = new BAPIADDR1();
                            //     paddr.E_Mail = objInter.Cliente.Mail;
                        }
                        iop.Country = objInter.Cliente.Pais;
                    }
                }
                else if (ParametroDALC.esTipoX(objInter.Funcion, "IlocPersona"))
                {
                    if (!string.IsNullOrEmpty(objInter.Persona.CodPersona))
                    {
                        iop = new BAPIPARNR();
                        iop.Partn_Role = objInter.Funcion;
                        iop.Partn_Numb = objInter.Persona.CodPersona;
                    }
                }
                if (iop != null)
                {
                    //rgutierrez 06.12.2011
                    cont += 1;
                    linkAddress = "$000" + cont;
                    if (ParametroDALC.esTipoX(objInter.Funcion, "IlocStandard")) { iop.Addr_Link = linkAddress; }

                    ref_Order_partners.Add(iop);

                    //rgutierrez 01.12.2011
                    paddr = new BAPIADDR1();
                    paddr.Addr_No = linkAddress;
                    paddr.Name = iop.Name;
                    paddr.Name_2 = iop.Name_2;
                    paddr.Name_3 = iop.Name_3;
                    paddr.Name_4 = iop.Name_4;
                    paddr.City = iop.City;
                    paddr.Postl_Cod1 = iop.Postl_Code;
                    paddr.Street_Lng = iop.Street;
                    paddr.Country = iop.Country;
                    paddr.Langu = iop.Langu;
                    paddr.Tel1_Numbr = iop.Telephone;

                    if (objInter.Funcion.Equals(ParametroDALC.getParamValueStatic("IlocCliente")))
                    {
                        paddr.E_Mail = mail;
                    }
                    if (paddr != null) { ref_partneraddresses.Add(paddr); }
                }
                // if (paddr != null) { ref_partneraddresses.Add(paddr); }

            }

            //tabla de textos
            BAPISDTEXTTable t_text = new BAPISDTEXTTable();
            foreach (TextoBE objTextoItm in pObjPedido.Textos)
            {
                BAPISDTEXT itm = new BAPISDTEXT();
                itm.Text_Id = objTextoItm.CodTexto;
                itm.Text_Line = objTextoItm.Descripcion;
                itm.Langu = objTextoItm.Langu;

                t_text.Add(itm);
            }

            //devuelve el log del proceso
            BAPIRET2Table ref_Return0 = new BAPIRET2Table();
            string returnValue = "";

            //-------------------
            PedidosProxy proxy = new PedidosProxy();
            proxy.Connection = DALC.getConnection;
            try
            {
                if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            }
            catch
            {
                throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
            }
            #region
            /*if (!pdd.E_Mail.Equals(""))
            {
                mail = pdd.E_Mail;
                pdd.E_Mail = string.Empty;
            }
               
            if ((ParametroDALC.esOferta(pObjPedido.CodTipoDoc)) || (!ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodNCND")))
            {
                iop = null;
                if (ref_partneraddresses.Count > 0)
                {
                    BAPIADDR1 pdd = ref_partneraddresses[0];

                    if (!pdd.E_Mail.Equals(""))
                    {
                        for (int i = 0; i <= ref_Order_partners.Count - 1; i++)
                        {
                            iop = ref_Order_partners[i];
                            iop.Addr_Link = "$000" + i;
                            paddr = null;
                            if (iop.Partn_Role.Equals("AG"))
                            {
                                paddr = ref_partneraddresses[0];
                                paddr.Addr_No = "$000" + i;
                                paddr.City = iop.City;
                                paddr.Langu = iop.Langu;
                                paddr.Name = iop.Name;
                                paddr.Street = iop.Street;
                                paddr.Title = iop.Title;
                                paddr.District = iop.District;
                                paddr.Postl_Cod1 = iop.Postl_Code;
                                paddr.Tel1_Numbr = iop.Telephone;

                            }
                            else
                            {
                                paddr = new BAPIADDR1();
                                paddr.Addr_No = "$000" + i;
                                paddr.City = iop.City;
                                paddr.Langu = iop.Langu;
                                paddr.Name = iop.Name;
                                paddr.Street = iop.Street;
                                paddr.Title = iop.Title;
                                paddr.District = iop.District;
                                paddr.Tel1_Numbr = iop.Telephone;
                                paddr.Postl_Cod1 = iop.Postl_Code;

                                ref_partneraddresses.Add(paddr);
                            }
                        }
                    }
                }
            }*/
            #endregion

            //-- verificar si se crea pedido/oferta/NC:
            if (ParametroDALC.esOferta(pObjPedido.CodTipoDoc) && !pObjPedido.CodTipoDoc.Equals("Z004"))
            {
                Order_Header_In.Qt_Valid_T = ParametroDALC.dateNetToSap(pObjPedido.FechaValidez);
                proxy.Zweb_Crear_Oferta(Order_Header_In, out returnValue, out ex_Salesdocument, ref ref_Order_conditions_in,
                                        ref ref_Order_items_in, ref ref_partneraddresses, ref ref_Order_partners,
                                        ref ref_Return0, ref ref_Order_schedule_in, ref t_text);
            }
            else if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodNCND") && !pObjPedido.CodTipoDoc.Equals("Z004"))
            {
                Order_Header_In.Price_Date = ParametroDALC.dateNetToSap(pObjPedido.FechaPrecio);
                proxy.Zweb_Crear_Ncredito(Order_Header_In, out returnValue, out ex_Salesdocument, ref ref_Order_conditions_in,
                                        ref ref_Order_items_in, ref ref_partneraddresses, ref ref_Order_partners,
                                        ref ref_Return0, ref ref_Order_schedule_in, ref t_text);
            }
            else
            {
                proxy.Zweb_Crear_Pedido(Order_Header_In, out returnValue, out ex_Salesdocument, ref ref_Order_conditions_in,
                                        ref ref_Order_items_in, ref ref_partneraddresses, ref ref_Order_partners,
                                        ref ref_Return0, ref ref_Order_schedule_in, ref t_text);
            }
            //-------------------
            SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            proxy.Connection = null;
            //-------------------

            ////if (!mail.Equals(""))
            ////{
            ////    foreach (InterlocutorBE objInter in pObjPedido.Interlocutores)
            ////    {
            ////        if (ParametroDALC.esTipoX(objInter.Funcion, "IlocEmpresa"))
            ////        {
            ////            if (!string.IsNullOrEmpty(objInter.Cliente.Codigo))
            ////            {
            ////                if (objInter.Funcion.Equals(ParametroDALC.getParamValueStatic("IlocCliente")) && !mail.Equals(""))
            ////                {
            ////                    //objInter.Cliente.Mail = mail;
            pObjPedido.Mail = mail;
            ////                }
            ////            }
            ////        }
            ////    }
            ////}
            string retVal = "", retMsg = "";
            foreach (BAPIRET2 itemRet in ref_Return0)
            {
                ////rgutierrez 17.01.2012
                //if (itemRet.Type == "E" && itemRet.Row > 0)
                //{
                //    itemRet.Message = "Pos. " + (itemRet.Row * 10) + ": " + itemRet.Message;
                //}

                retVal += (itemRet.Type == "E") ? itemRet.Message + "\r\n" : "";
                retMsg += (itemRet.Type != "S" && itemRet.Type != "W") ? itemRet.Message + "\n" : "";
            }
            pNumPedido = ex_Salesdocument;
            if (returnValue == "X")
            {
                //--- grabar nif
                pObjPedido.NumPedido = ex_Salesdocument;
                //if (objClienteBE != null && objClienteBE.Eventual)
                //{
                //    this.grabarNIF(pObjPedido);
                //}

                string auxMod = "";
                bool pOkModif = true;
                ////--- @Fix para precios en pedidos de servicio...
                ////if (!ParametroDALC.esOferta(pObjPedido.CodTipoDoc))
                //InterlocutorBE objSolicitante = pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocCliente"); });
                //InterlocutorBE objResPago = pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocResPago"); });
                //pObjPedido = leer(pObjPedido.NumPedido, false);
                //pObjPedido.Mail = mail;
                ////if ((ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodPedModif")) || (!mail.Equals("")))
                //if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodPedModif")) //rgutierrez 01.12.2011 El correo ya se guarda en la creación
                //{
                //    pObjPedido.NumPedido = pNumPedido;
                //    string strRucAG = objSolicitante.Cliente.Ruc;
                //    pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocCliente"); }).Cliente.Ruc = strRucAG;
                //    strRucAG = objResPago.Cliente.Ruc;
                //    pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocResPago"); }).Cliente.Ruc = strRucAG;

                //    foreach (DetalleBE item in pObjPedido.Detalle)
                //    {
                //        item.Peso = item.Peso / item.Cantidad; // 23.08.2011 : se agregó para sacar la el peso unitario.
                //        item.TipoPosicion = string.Empty;
                //        if (!ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodOferta"))
                //            item.Repartos.Clear();// = new List<RepartoBE>();
                //    }

                //    auxMod = this.modificar(out pOkModif, pObjPedido);
                //}
                //--------------

                //--- buscar mensaje de retorno:generarServicio
                BAPIRET2 itemRet = ref_Return0[ref_Return0.Count - 1];
                if (itemRet.Type == "S")
                {
                    retVal += itemRet.Message + "\n";
                }
                else
                {
                    retVal += "Se creó el doc. de ventas con el número: " + ex_Salesdocument + "\n";
                }
                //-- si la modificación de servicios no fue exitosa, mostrar mensaje de error
                if (!pOkModif)
                {
                    retVal += auxMod + "\n";
                }
                //retVal += string.IsNullOrEmpty(auxMod) ? "" : "No se pudo grabar todas las modificaciones, por favor revise el doc. de ventas.\n" + auxMod;
            }
            else
            {
                //--- si hubo error, muestra todo el mensaje de error.
                retVal = retMsg;
            }
            return retVal;
        }

        /// <summary>
        /// retorna la información del documento de ventas
        /// </summary>
        /// <param name="pNumPedido">número de pedido/oferta</param>
        /// <returns>Objeto con la información del pedido/oferta</returns>
        public PedidoBE leer(string pNumPedido, bool pLight)
        {
            PedidoBE retPedidoBE = new PedidoBE();
            List<InterlocutorBE> lstInterlocutores = new List<InterlocutorBE>();
            List<DetalleBE> lstDetalle = new List<DetalleBE>();

            PedidosProxy proxy = new PedidosProxy();
            proxy.Connection = DALC.getConnection;
            try
            {
                if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            }
            catch
            {
                throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
            }
            //-------------------
            KONVTable t_konv = new KONVTable();
            VBAKTable t_vbak = new VBAKTable();
            VBAPTable t_vbap = new VBAPTable();
            VBEPTable t_vbep = new VBEPTable();
            VBKDTable t_vbkd = new VBKDTable();
            VBPATable t_vbpa = new VBPATable();
            T179TTable t_t179t = new T179TTable();

            BAPISDTEXTTable t_text = new BAPISDTEXTTable();
            proxy.Zweb_Ver_Pedido(pNumPedido, ref t_konv, ref t_t179t, ref t_text, ref t_vbak, ref t_vbap, ref t_vbep, ref t_vbkd, ref t_vbpa);
            //manejo de conexión
            SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            string reembolsable = string.Empty;
            proxy.Connection = null;
            if (t_vbak.Count == 0) { return null; }
            if (t_vbak.Count > 0)
            {
                VBAK item = t_vbak[0];

                reembolsable = item.Taxk6.Trim();
                retPedidoBE.SubtotalImp = item.Netwr;

                retPedidoBE.CodCliente = item.Kunnr;
                retPedidoBE.OrgVentas = item.Vkorg;
                retPedidoBE.CanalDist = item.Vtweg;
                retPedidoBE.Sector = item.Spart;
                retPedidoBE.CodOficina = item.Vkbur;
                retPedidoBE.CodGrupoVend = item.Vkgrp;
                retPedidoBE.CodTipoDoc = item.Auart;
                retPedidoBE.CondExp = item.Vsbed;
                //---
                retPedidoBE.Tratado = (item.Vbtyp.ToUpper() == "X" ? true : false);
                retPedidoBE.TieneEntrega = (item.Taxk9.ToUpper() == "X" ? true : false);
                //---
                retPedidoBE.Referencia = item.Xblnr;
                retPedidoBE.DocOriginal = item.Vgbel;

                //retPedidoBE.CondPago = item.
                retPedidoBE.OrdenCompra = item.Bstnk;
                retPedidoBE.BloqueoEntrega = item.Lifsk;
                retPedidoBE.BloqueoFactura = item.Faksk;
                retPedidoBE.Motivo = item.Augru;
                retPedidoBE.Moneda = item.Waerk;
                //modificado 19.06.2012 se cambio de Audat a BSTDK rhuapaya @@@ 
                if (item.Auart == "ZO01" || item.Auart == "ZO02")
                {
                    retPedidoBE.Fecha = ParametroDALC.dateSapToNet(item.Erdat);
                }
                else
                {
                    retPedidoBE.Fecha = t_vbkd[0].Bstdk == "00000000" ? ParametroDALC.dateSapToNet(item.Erdat) : ParametroDALC.dateSapToNet(t_vbkd[0].Bstdk);
                }
                retPedidoBE.Mail = item.Crm_Guid.Trim();
                if (item.Bnddt != "00000000")
                {
                    retPedidoBE.FechaValidez = ParametroDALC.dateSapToNet(item.Bnddt);
                }
                if (item.Vdatu != "00000000")
                {
                    retPedidoBE.FechaEntrega = ParametroDALC.dateSapToNet(item.Vdatu);
                }

                //--- Pedido de servicios
                retPedidoBE.Ztransporte = item.Ztransporte;
                retPedidoBE.Znpiso = item.Znpiso;
                retPedidoBE.Zncservicio = item.Zncservicio == "X" ? true : false;
                retPedidoBE.Zasensor = item.Zascensor == "X" ? true : false;

                //fecha de facturación
                VBKD itemkd = t_vbkd[0];
                if (item.Bstdk != "00000000" || item.Bstdk != "")
                {
                    //se modifico el 19.06.2012 rhuapaya se cambio VBAK-Bstdk por VBKD-FKDAT @@@
                    //se modifico el 11.02.2012 rhuapaya se cambio VBAK-FKDAT por VBKD-Prsdt @@@
                    //VBKD itemkd = t_vbkd[0];
                    retPedidoBE.FechaFacturacion = ParametroDALC.dateSapToNet(itemkd.Prsdt);
                }
                retPedidoBE.FechaPrecio = ParametroDALC.dateSapToNet(itemkd.Prsdt);
                //INICIO VISITAS: mtejada 09.09.2011
                retPedidoBE.TipoVisita = item.Zztipo_Visita;
                if (item.Zzvisita_Reem.Equals("X"))
                {
                    retPedidoBE.Reenbolsable = true;
                }
                //FIN VISITAS: mtejada 09.09.2011

                //INICIO INSTALACIONES: mtejada 12.10.2011
                retPedidoBE.PedidoVenta1 = item.Zvbeln1;
                retPedidoBE.PedidoVenta2 = item.Zvbeln2;
                retPedidoBE.PedidoVenta3 = item.Zvbeln3;
                retPedidoBE.PedidoVenta4 = item.Zvbeln4;

                retPedidoBE.PedidoVisita1 = item.Zzbeln1;
                retPedidoBE.PedidoVisita2 = item.Zzbeln2;
                retPedidoBE.PedidoVisita3 = item.Zzbeln3;
                retPedidoBE.PedidoVisita4 = item.Zzbeln4;
                //FIN INSTALACIONES: mtejada 12.10.2011
                //rhuapaya 14.02.2012
                retPedidoBE.nomProyecto = item.Zzproyecto;
                //agregar codigo de proyecto y cod de version
                retPedidoBE.codProyecto = item.Zzcodproyecto;
                retPedidoBE.codVersion = item.Zzversion;


                // cod de proyecto y cod de version

            }
            if (t_vbkd.Count > 0)
            {
                VBKD item = t_vbkd[0];

                retPedidoBE.GrupoCond = item.Kdkg1;
                retPedidoBE.CondPago = item.Zterm;
            }

            if (!pLight)
            {
                //-- interlocutores:
                lstInterlocutores = this.listaInterlocutores(pNumPedido);
                retPedidoBE.Interlocutores = lstInterlocutores;
            }

            foreach (VBAP item in t_vbap)
            {
                DetalleBE objDet = new DetalleBE();
                objDet.Posicion = item.Posnr;
                objDet.CodMaterial = item.Matnr;
                objDet.CodUMedida = item.Meins;
                objDet.CodCentro = item.Werks;
                objDet.CodAlmacen = item.Lgort;
                objDet.CodLote = item.Charg;
                objDet.Posicion = item.Posnr;
                objDet.DescMaterial = item.Arktx;

                if (reembolsable != "")
                    objDet.Reembolsable = "(" + reembolsable + ")";

                //-- tipo de posición
                objDet.TipoPosicion = item.Pstyv;
                objDet.PosSup = item.Uepos;
                objDet.CantComp = item.Kmpmg;
                objDet.TipoPosAnt = item.Pstyv;
                //codigo de agrupación
                objDet.CodGrupoMat = item.Mvgr1;
                objDet.MotivoRechazo = item.Abgru;

                //-- material
                objDet.Material.CodMaterial = item.Matnr;
                objDet.Material.CodUMedida = item.Meins;
                //rhuapaya 18.06.2012 @@@ se agrego la jerarquia
                objDet.Material.Jerarquia = item.Prodh;

                //validación de documento de transporte:
                if (ParametroDALC.esTipoX(retPedidoBE.CodTipoDoc, "CodTransporte"))
                {
                    objDet.Cantidad = item.Brgew;
                    objDet.Peso = item.Kwmeng;
                }
                //else if (ParametroDALC.esTipoX(retPedidoBE.CodTipoDoc, "CodNCZP01"))
                else if (ParametroDALC.esTipoX(retPedidoBE.CodTipoDoc, "CodNCND"))
                {
                    if (item.Zmeng == 0)
                        objDet.Cantidad = item.Kwmeng;
                    else
                        objDet.Cantidad = item.Zmeng;

                    //objDet.Cantidad = item.Zmeng;

                    objDet.Peso = item.Ntgew;
                }
                else
                {
                    objDet.Cantidad = item.Kwmeng;
                    objDet.Peso = item.Ntgew;
                }

                //repartos
                objDet.Repartos.Clear();

                foreach (VBEP item2 in t_vbep)
                {
                    if (item2.Posnr == item.Posnr)
                    {
                        RepartoBE itmRep = new RepartoBE();
                        itmRep.CantConf = item2.Bmeng;
                        itmRep.CantPed = item2.Wmeng;
                        itmRep.Pos = (int.Parse(item2.Etenr)).ToString();
                        itmRep.FechaEntrega = ParametroDALC.dateSapToNet(item2.Edatu);
                        itmRep.TipoReparto = item2.Ettyp.Trim();
                        objDet.Repartos.Add(itmRep);

                        if (item2.Etenr == "0001")
                        {
                            //objDet.FechaEntrega = ParametroDALC.dateSapToNet(item2.Edatu);
                        }
                        if (item2.Bmeng > 0m)
                        {
                            objDet.CantConfirmada = item2.Bmeng;
                            objDet.FechaCantConf = ParametroDALC.dateSapToNet(item2.Edatu);
                        }
                    }
                }
                objDet.PrioridadEntrega = item.Lprio;

                //condiciones
                objDet.PrecioSinIGV = item.Netpr;
                objDet.TotalImpresion = item.Kzwi3;
                // descuentos


                decimal dscM00 = 0m;
                decimal dscM01 = 0m;
                decimal dscM02 = 0m;
                decimal dscM03 = 0m;
                decimal dscM04 = 0m;
                decimal dscM05 = 0m;
                decimal dscM06 = 0m;
                decimal dscM07 = 0m;
                decimal dsGenerico = 0m;
                decimal dscMT = 0m;

                foreach (KONV item3 in t_konv)
                {
                    if (item3.Kposn == item.Posnr)
                    {
                        if (ParametroDALC.esTipoX(item3.Kschl, "CondPrecios"))
                        {
                            objDet.Precio.Valor = item3.Kwert;
                            objDet.Precio.Importe = item3.Kbetr;
                        }
                        else if (item3.Kschl.Equals(ParametroDALC.getParamValueStatic("CondPrecio6")))
                        {
                            if (objDet.Precio.Importe != 0m)
                            {
                                if (objDet.Precio.Importe < item3.Kbetr)
                                {
                                    objDet.Precio.Importe = item3.Kbetr;
                                    objDet.Precio.Valor += item3.Kwert;
                                }
                            }
                            else
                            {
                                objDet.Precio.Importe = item3.Kbetr;
                                objDet.Precio.Valor = item3.Kwert;
                            }
                        }
                        else if (item3.Kschl.Equals(ParametroDALC.getParamValueStatic("CondPrecio1")))
                        {
                            objDet.Diferencia.Valor = item3.Kwert;
                            objDet.Diferencia.Importe = item3.Kbetr;
                        }
                        else if (item3.Kschl.Equals(ParametroDALC.getParamValueStatic("CondPrecio8")))
                        {
                            objDet.PreZP08.Valor = item3.Kwert;
                            objDet.PreZP08.Importe = item3.Kbetr;//%
                        }
                        else if (item3.Kschl.Equals(ParametroDALC.getParamValueStatic("CondIgv")))
                        {
                            objDet.Igv.Valor = item3.Kwert;
                            objDet.Igv.Importe = item3.Kbetr;
                        }
                        else if (item3.Kschl.Equals(ParametroDALC.getParamValueStatic("CondDctoDecorPorc")))
                        {
                            objDet.DctoDecorPorc.Valor = item3.Kwert;
                            objDet.DctoDecorPorc.Importe = item3.Kbetr * .1m;

                            dscM00 = item3.Kwert;

                        }
                        else if (item3.Kschl.Equals(ParametroDALC.getParamValueStatic("CondDctoAdicionalPorc")))
                        {
                            objDet.DctoAdicionalPorc.Valor = item3.Kwert;
                            objDet.DctoAdicionalPorc.Importe = item3.Kbetr * .1m;

                            dscM02 = item3.Kwert;
                        }
                        else if (item3.Kschl.Equals(ParametroDALC.getParamValueStatic("CondDctoEstadisticoPorc")))
                        {
                            objDet.DctoEstadisticoPorc.Valor = item3.Kwert;
                            objDet.DctoEstadisticoPorc.Importe = item3.Kbetr * .1m;

                            dscM03 = item3.Kwert;
                        }
                        else if (item3.Kschl.Equals(ParametroDALC.getParamValueStatic("CondDctoGerenciaPorc")))
                        {
                            objDet.DctoGerenciaPorc.Valor = item3.Kwert;
                            objDet.DctoGerenciaPorc.Importe = item3.Kbetr * .1m;

                            dscM04 = item3.Kwert;
                        }
                        else if (item3.Kschl.Equals(ParametroDALC.getParamValueStatic("CondDctoGerenciaMonto")))
                        {
                            objDet.DctoGerenciaMonto.Valor = item3.Kwert;
                            objDet.DctoGerenciaMonto.Importe = item3.Kbetr;

                            dscM05 = item3.Kwert;

                        }
                        else if (item3.Kschl.Equals(ParametroDALC.getParamValueStatic("CondZD06")))
                        {
                            objDet.DctoZD06.Valor = item3.Kwert;
                            objDet.DctoZD06.Importe = item3.Kbetr * .1m;

                            dscM06 = item3.Kwert;
                        }
                        else if (item3.Kschl.Equals(ParametroDALC.getParamValueStatic("CondZD07")))
                        {
                            objDet.DctoZD07.Valor = item3.Kwert;
                            objDet.DctoZD07.Importe = item3.Kbetr * .1m;

                            dscM07 = item3.Kwert;
                        }
                        else if (ParametroDALC.esTipoX(item3.Kschl, "CondZD11"))
                        {
                            objDet.DctoZD11.Condicion = item3.Kschl; //@mtejada 23.09.2011
                            objDet.DctoZD11.Valor = item3.Kwert;
                            objDet.DctoZD11.Importe = item3.Kbetr * .1m;

                            //dsGenerico = item3.Kwert;
                        }
                        else if (ParametroDALC.esTipoX(item3.Kschl, "CondDctos"))
                        {
                            objDet.DctoGenerico.Condicion = item3.Kschl; //@mtejada 16.08.2011
                            objDet.DctoGenerico.Valor = item3.Kwert;
                            objDet.DctoGenerico.Importe = item3.Kbetr * .1m;

                            //dsGenerico = item3.Kwert;
                        }
                        else if (ParametroDALC.esTipoX(item3.Kschl, "CondDctosZD08"))
                        {
                            objDet.DctoGenericoZD08.Condicion = item3.Kschl; //@mtejada 17.10.2011
                            objDet.DctoGenericoZD08.Valor = item3.Kwert;
                            objDet.DctoGenericoZD08.Importe = item3.Kbetr * .1m;

                            //dsGenerico = item3.Kwert;
                        }
                        else if (ParametroDALC.esTipoX(item3.Kschl, "CondDctosAdicional")) //rhuapaya 25.06.2012 @@@
                        {
                            objDet.DsctoAdicionalZD12.Condicion = item3.Kschl;
                            objDet.DsctoAdicionalZD12.Valor = item3.Kwert;
                            objDet.DsctoAdicionalZD12.Importe = item3.Kbetr * .1m;
                            //le asignamos al pedido tambien
                            retPedidoBE.dsctoAdicionalZD12 = item3.Kbetr * .1m;
                        }
                        else if (item3.Kschl == "ZPRC")//percepcion
                        {
                            objDet.TotPercep = item3.Kwert;
                        }
                    }


                }
                //--- Servicios
                objDet.Zservicio = item.Zservicio == "X" ? true : false;


                if (dscM04 != 0)
                    dscMT = dscM04 + dscM07 + dscM06;
                else
                    dscMT = dscM00 + dscM01 + dscM02 + dscM03 + dscM05 + dscM06 + dscM07;

                objDet.DsctoMontTotal = dscMT;

                lstDetalle.Add(objDet);
            }

            //para el agrupamiento de produtos por jerarquia @@@
            foreach (DetalleBE item in lstDetalle)
            {
                if (item.Material.Jerarquia != null && item.Material.Jerarquia != "")
                {
                    foreach (T179T _item in t_t179t)
                    {
                        if (_item.Prodh == item.Material.Jerarquia.Substring(0, 2))
                        {
                            item.JerarquiaPrincipalDesc = _item.Vtext;
                            break;
                        }
                    }
                }
            }

            if (!pLight)
            {
                //ahora lo hace en el BC
                //--- cargar cantidades de componente:
                //string tpos = "";
                //foreach (DetalleBE objTmpDet in lstDetalle)
                //{
                //    if (objTmpDet.PosSupCorto == "0" || objTmpDet.PosSupCorto == "")
                //    {
                //        List<DetalleBE> lstHijos = this.buscaTipoPosicion(retPedidoBE.CodTipoDoc, objTmpDet.CodMaterial, retPedidoBE.OrgVentas, retPedidoBE.CanalDist, objTmpDet.CodCentro, out tpos);
                //        foreach (DetalleBE itmHijo in lstHijos)
                //        {
                //            List<DetalleBE> lstAux = lstDetalle.FindAll(X => X.CodMaterial == itmHijo.CodMaterial);
                //            foreach (DetalleBE itmAux in lstAux)
                //            {
                //                itmAux.CantComp = itmHijo.CantComp;
                //            }
                //        }
                //    }
                //}
                //------------------------------------
            }

            List<TextoBE> lstTextos = new List<TextoBE>();
            List<GlosaBE> lstBono = new List<GlosaBE>();
            List<GlosaBE> lstRegalo = new List<GlosaBE>();//RGF 20111028
            bool tienebonotitulo = false;
            bool tieneregalotitulo = false;//RGF 20111028
            char[] delimitador = { '-' };
            string[] linea;
            foreach (BAPISDTEXT item in t_text)
            {
                string temp = item.Text_Line;
                if (item.Text_Id.Equals("BONO"))
                {
                    if (!tienebonotitulo)
                    {
                        GlosaBE Gt = new GlosaBE();
                        Gt.codMaterial = "Resumen de Ventas para Marca";
                        lstBono.Add(Gt);
                        tienebonotitulo = true;

                    }
                    GlosaBE G = new GlosaBE();
                    linea = item.Text_Line.Split(delimitador);
                    G.codMaterial = linea[0].ToString();
                    if (G.codMaterial.Equals("Total de Bonos"))
                    {
                        G.glosa = linea[1].ToString() + linea[2].ToString();
                    }
                    else
                    {
                        G.codJerarquia = linea[1].ToString() + linea[2].ToString();
                        G.glosa = linea[3].ToString() + linea[4].ToString();
                    }
                    lstBono.Add(G);
                }
                else if (item.Text_Id.Equals("REGA"))//RGF 20111028
                {
                    if (!tieneregalotitulo)
                    {
                        GlosaBE Gt = new GlosaBE();
                        Gt.codMaterial = "Resumen de Regalos para Marca";
                        lstRegalo.Add(Gt);

                        Gt = new GlosaBE();
                        Gt.codMaterial = "Marca";
                        Gt.codJerarquia = "Importe";
                        lstRegalo.Add(Gt);
                        tieneregalotitulo = true;
                    }
                    GlosaBE G = new GlosaBE();
                    linea = item.Text_Line.Split(delimitador);
                    G.codMaterial = linea[0].ToString();
                    G.codJerarquia = linea[1].ToString() + linea[2].ToString();
                    //G.glosa = linea[3].ToString() + linea[4].ToString();
                    lstRegalo.Add(G);
                }
                else
                {
                    TextoBE objTxt = new TextoBE();
                    objTxt.CodTexto = item.Text_Id;
                    objTxt.Descripcion = item.Text_Line;

                    lstTextos.Add(objTxt);
                }
            }

            //problema visresdetvis1 

            //solucion visresdetvis1
            List<TextoBE> lstTmp = new List<TextoBE>();
            List<TextoBE> lstTmp2 = new List<TextoBE>();
            string codtext = "", destext = "";
            foreach (TextoBE item in lstTextos)
            {
                destext = "";
                if (item.CodTexto == codtext)
                {
                    destext = item.Descripcion;
                }
                else
                {
                    TextoBE objT = new TextoBE();
                    objT.CodTexto = item.CodTexto;
                    objT.Descripcion = destext;
                    lstTmp.Add(objT);
                }
                codtext = item.CodTexto;
            }

            foreach (TextoBE item in lstTmp)
            {
                foreach (TextoBE itemT in lstTextos)
                {
                    if (item.CodTexto == itemT.CodTexto)
                    {
                        item.Descripcion += itemT.Descripcion + " ";
                    }
                }
            }
            //

            retPedidoBE.Detalle = lstDetalle;
            retPedidoBE.NumPedido = pNumPedido;

            //problema visresdetvis1 
            //retPedidoBE.Textos = lstTextos;

            //solucion visresdetvis1
            retPedidoBE.Textos = lstTmp;
            retPedidoBE.BonoCampania = lstBono;
            retPedidoBE.RegaloCampania = lstRegalo;//RGF 20111028
            return retPedidoBE;
        }

        /// <summary>
        /// modifica la información del pedido/oferta
        /// </summary>
        /// <param name="pObjPedido">Objeto que contiene la información del pedido/oferta</param>
        /// <returns>mensaje resultado</returns>
        public string modificar(out bool pOk, PedidoBE pObjPedido)
        {
            InterlocutorBE objSolicitante = pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocCliente"); });
            InterlocutorBE objRestmp = pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocResPago"); });
            //validando que el cliente eventual tenga un ruc @@@@ rhuapaya 30.07.2012
            if (objSolicitante.Cliente.Ruc == null || objSolicitante.Cliente.Ruc.Trim() == "")
            {
                throw new Exception("El cliente necesita un número de RUC");
            }

            PedidoBE retObj = new PedidoBE(); List<DetalleBE> lstDetalle = new List<DetalleBE>();
            //-------------------
            string p_Ok = "";

            //-- cabecera
            BAPISDH1Table t_header_in = new BAPISDH1Table();
            BAPISDH1 t_header_in_item = new BAPISDH1();

            t_header_in_item.Sales_Grp = pObjPedido.CodGrupoVend;
            t_header_in_item.Sales_Off = pObjPedido.CodOficina;
            t_header_in_item.Distr_Chan = pObjPedido.CanalDist;
            t_header_in_item.Sales_Org = pObjPedido.OrgVentas;

            //t_header_in_item.Req_Date_H = ParametroDALC.dateNetToSap(pObjPedido.FechaEntrega);
            t_header_in_item.Req_Date_H = ParametroDALC.dateNetToSap(pObjPedido.Fecha);
            t_header_in_item.Doc_Date = ParametroDALC.dateNetToSap(pObjPedido.Fecha);

            t_header_in_item.Bill_Date = ParametroDALC.dateNetToSap(pObjPedido.FechaFacturacion);//////

            t_header_in_item.Dlv_Block = pObjPedido.BloqueoEntrega;
            t_header_in_item.Bill_Block = pObjPedido.BloqueoFactura;
            t_header_in_item.Cstcndgrp1 = pObjPedido.GrupoCond;
            t_header_in_item.Ord_Reason = pObjPedido.Motivo;

            t_header_in_item.Pmnttrms = pObjPedido.CondPago;

            t_header_in_item.Ship_Cond = pObjPedido.CondExp;
            t_header_in_item.Purch_No_C = pObjPedido.OrdenCompra;
            t_header_in_item.Currency = pObjPedido.Moneda;

            //INICIO VISITAS: mtejada 09.09.2011
            t_header_in_item.H_Curr = pObjPedido.TipoVisita;
            if (pObjPedido.Reenbolsable) { t_header_in_item.Ship_Type = "X"; }
            //FIN VISITAS: mtejada 09.09.2011

            //rhuapaya 14.02.2012
            t_header_in_item.Purch_No_S = pObjPedido.nomProyecto;

            //agregar cod de proyecto y cod de version
            t_header_in_item.Rec_Point = pObjPedido.codProyecto;
            t_header_in_item.Fkk_Conacct = pObjPedido.codVersion;

            //modificar validez de la oferta:
            if (ParametroDALC.esOferta(pObjPedido.CodTipoDoc))
            {
                t_header_in_item.Qt_Valid_T = ParametroDALC.dateNetToSap(pObjPedido.FechaValidez);
            }

            //--- Campos Zs Servicios
            t_header_in_item.Add_Val_Dy = pObjPedido.Znpiso;
            if (!ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodNCND")) //@@@@@ rhuapaya 16.08.2012
            {
                t_header_in_item.Tax_Class9 = pObjPedido.Zasensor ? "X" : "";
                t_header_in_item.Tax_Class8 = pObjPedido.Ztransporte;//F,FE,I,E 
            }

            //-------------------
            t_header_in.Add(t_header_in_item);

            List<string> correo = new List<string>(Regex.Split(pObjPedido.Mail, @"(?<=\G.{30})")); //rgutierrez 02.12.2011

            //-- interlocutores
            BAPIPARNRTable t_partners = new BAPIPARNRTable();
            foreach (InterlocutorBE iloc in pObjPedido.Interlocutores)
            {
                BAPIPARNR t_partners_item = new BAPIPARNR();
                t_partners_item.Partn_Role = iloc.Funcion;
                if (iloc.Funcion == ParametroDALC.getParamValueStatic("IlocCliente"))
                {
                    t_partners_item.Unload_Pt = objSolicitante.Cliente.Ruc.Trim() + "|" + objRestmp.Cliente.Ruc.Trim();
                }
                //rgutierrez 02.12.2011
                t_partners_item.Teletex_No = correo[0];
                t_partners_item.Telex_No = correo.Count > 1 ? correo[1] : "";
                //t_partners_item.Refobjkey = pObjPedido.Mail;

                if (iloc.Funcion.Equals("Z3"))
                {
                    t_partners_item.Name = iloc.Cliente.Descripcion;
                }
                if (ParametroDALC.esTipoX(iloc.Funcion, "IlocEmpresa"))
                {
                    if (!string.IsNullOrEmpty(iloc.Cliente.Codigo))
                    {
                        t_partners_item.Partn_Numb = iloc.Cliente.Codigo;
                        if (!iloc.Funcion.Equals(ParametroDALC.getParamValueStatic("IlocAgTrans")))
                        {
                            t_partners_item.Name = iloc.Cliente.Descripcion.Length > 35 ? iloc.Cliente.Descripcion.Substring(0, 35) : iloc.Cliente.Descripcion;
                            t_partners_item.Name_2 = iloc.Cliente.Descripcion.Length > 35 ? iloc.Cliente.Descripcion.Substring(35) : "";
                            //-----------

                            //rgutierrez 02.12.2011
                            t_partners_item.Refobjkey = iloc.Cliente.Direccion;
                            //t_partners_item.Street = iloc.Cliente.Direccion;

                            t_partners_item.Postl_Code = iloc.Cliente.CodigoPostal;
                            t_partners_item.City = iloc.Cliente.Ciudad;
                            t_partners_item.Telephone = iloc.Cliente.Telefono;
                            //--- falta tabla para mails...
                            //paddr = new BAPIADDR1();
                            //paddr.E_Mail = objInter.Cliente.Mail;
                            t_partners_item.Title = ParametroDALC.getParamValueStatic("Tratamiento");
                            t_partners_item.Langu = "S";

                        }
                        t_partners_item.Country = iloc.Cliente.Pais;

                        t_partners.Add(t_partners_item);
                    }
                }
                else if (ParametroDALC.esTipoX(iloc.Funcion, "IlocPersona"))
                {
                    if (!string.IsNullOrEmpty(iloc.Persona.CodPersona))
                    {
                        t_partners_item.Country = "PE";
                        //t_partners_item.Langu = "S"; //rgutierrez 28.12.2011 No estaba guardando datos del profesional
                        t_partners_item.Title = ParametroDALC.getParamValueStatic("Tratamiento");
                        t_partners_item.Partn_Numb = iloc.Persona.CodPersona;
                        t_partners.Add(t_partners_item);
                    }
                }
            }
            //siempre tiene q mandar el Encargado Comercial!
            string pFuncEncComercial = ParametroDALC.getParamValueStatic("IlocVendedor1");
            int idx = t_partners.FindBy("Partn_Role", pFuncEncComercial);
            if (idx <= 0)
            {
                BAPIPARNR t_partners_itemVE = new BAPIPARNR();
                t_partners_itemVE.Partn_Role = pFuncEncComercial;
                t_partners.Add(t_partners_itemVE);
            }
            //----
            BAPISCHDLTable t_schdl_in = new BAPISCHDLTable();
            BAPISDITMTable t_item_in = new BAPISDITMTable();
            BAPICONDTable t_conditions_in = new BAPICONDTable();

            foreach (DetalleBE objDetalle in pObjPedido.Detalle)
            {
                //--- schedule / vbep / repartos
                BAPISCHDL t_schdl_in_item;
                foreach (RepartoBE itmRep in objDetalle.Repartos)
                {
                    if (itmRep.CantPed > 0m || itmRep.CantConf > 0m)
                    {
                        t_schdl_in_item = new BAPISCHDL();
                        t_schdl_in_item.Itm_Number = objDetalle.Posicion;
                        t_schdl_in_item.Sched_Line = itmRep.Pos;

                        if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodReserva"))
                        {

                            itmRep.FechaEntrega = pObjPedido.Fecha.AddDays(Convert.ToDouble(ParametroDALC.getParamValueStatic("ValidezReserva")));
                        }
                        t_schdl_in_item.Req_Date = ParametroDALC.dateNetToSap(itmRep.FechaEntrega);
                        //validación de documento de transporte:
                        if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodTransporte"))
                        {
                            t_schdl_in_item.Req_Qty = 1m;
                        }
                        else
                        {
                            t_schdl_in_item.Req_Qty = itmRep.CantPed;
                        }

                        t_schdl_in.Add(t_schdl_in_item);
                    }
                }
                //-----------------------------------

                BAPISDITM t_item_in_item = new BAPISDITM();
                t_item_in_item.Itm_Number = objDetalle.Posicion;
                t_item_in_item.Material = objDetalle.CodMaterial;

                //-- para modificar la fecha de entrega...
                //t_item_in_item.Bill_Date = ParametroDALC.dateNetToSap(objDetalle.FechaEntrega);

                //validación de documento de transporte:
                //if (pObjPedido.CodTipoDoc == ParametroDALC.getParamValueStatic("CodTransporte"))
                if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodTransporte"))
                {
                    t_item_in_item.Untof_Wght = "KG";
                    t_item_in_item.Gross_Wght = objDetalle.Cantidad;
                    t_item_in_item.Net_Weight = objDetalle.Cantidad;
                    t_item_in_item.Target_Qty = 1m;
                }
                else
                {
                    if (!ParametroDALC.esTipoX(objDetalle.TipoPosicion, "TipoCabCombo"))
                    {
                        t_item_in_item.Gross_Wght = objDetalle.PesoNeto;
                        t_item_in_item.Net_Weight = objDetalle.PesoNeto;
                    }
                    t_item_in_item.Untof_Wght = "KG";
                    t_item_in_item.Target_Qty = objDetalle.Cantidad;

                }

                t_item_in_item.Target_Qu = objDetalle.CodUMedida;
                t_item_in_item.Plant = objDetalle.CodCentro;
                //t_item_in_item.Store_Loc = objDetalle.CodAlmacen;
                //t_item_in_item.Batch = objDetalle.CodLote;

                if (!ParametroDALC.esTipoX(pObjPedido.CodTipoDoc.Trim().ToUpper(), "PedSinAlm"))
                    t_item_in_item.Store_Loc = objDetalle.CodAlmacen;
                else
                    objDetalle.CodAlmacen = string.Empty;

                if (!ParametroDALC.esTipoX(pObjPedido.CodTipoDoc.Trim().ToUpper(), "CodSinLote"))
                {
                    t_item_in_item.Batch = objDetalle.CodLote;
                }
                else
                {
                    objDetalle.CodLote = string.Empty;
                }

                t_item_in_item.Dlv_Prio = objDetalle.PrioridadEntrega;
                t_item_in_item.Prc_Group1 = objDetalle.CodGrupoMat;
                t_item_in_item.Reason_Rej = objDetalle.MotivoRechazo;

                t_item_in_item.Short_Text = objDetalle.DescMaterial;
                //--- tipo de posición
                t_item_in_item.Item_Categ = objDetalle.TipoPosicion;
                t_item_in_item.Hg_Lv_Item = objDetalle.PosSup;

                //si es tipopos cabecera Combo, busca los hijos para cambiar reparto, grp mat, 
                if (ParametroDALC.esTipoCabComboStatic(objDetalle.TipoPosicion) &&
                    ParametroDALC.esTipoCabKitStatic(objDetalle.TipoPosicion))
                {
                    List<DetalleBE> lstAux = pObjPedido.Detalle.FindAll(X => X.PosSup == objDetalle.Posicion);
                    foreach (DetalleBE itmAux in lstAux)
                    {
                        itmAux.Cantidad = itmAux.CantComp * objDetalle.Cantidad;
                        //si UM = UNidad => redondear al entero mayor
                        if (ParametroDALC.esTipoX(itmAux.CodUMedida, "UMUnidad"))
                        {
                            itmAux.Cantidad = (itmAux.Cantidad > decimal.Truncate(itmAux.Cantidad)) ? decimal.Truncate(itmAux.Cantidad) + 1 : itmAux.Cantidad;
                        }

                        itmAux.CodGrupoMat = objDetalle.CodGrupoMat;

                        //itmAux.FechaEntrega = objDetalle.FechaEntrega;
                        itmAux.PrioridadEntrega = objDetalle.PrioridadEntrega;
                    }
                }
                //--- campos Zs Servicios
                t_item_in_item.Tax_Class9 = objDetalle.Zservicio ? "X" : "";
                //--- añadir a tabla de items
                t_item_in.Add(t_item_in_item);

                //-- condiciones
                BAPICOND t_conditions_in_item;
                //condicion de precio: ZP00 => Cond_St_No = 100

                if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodNCZP01"))
                {
                    if (objDetalle.Diferencia.Importe != 0m)
                    {
                        t_conditions_in_item = new BAPICOND();
                        t_conditions_in_item.Itm_Number = objDetalle.Posicion;
                        t_conditions_in_item.Cond_Type = objDetalle.Diferencia.Condicion;
                        t_conditions_in_item.Cond_Value = objDetalle.Diferencia.Importe * .1m;
                        t_conditions_in_item.Cond_St_No = "111";
                        t_conditions_in_item.Cond_Count = "01";
                        t_conditions_in.Add(t_conditions_in_item);
                    }
                }
                else if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodPedServ"))
                {
                    if (objDetalle.DctoZD06.Importe != 0m)
                    {
                        t_conditions_in_item = new BAPICOND();
                        t_conditions_in_item.Itm_Number = objDetalle.Posicion;
                        t_conditions_in_item.Cond_Type = objDetalle.DctoZD06.Condicion;
                        t_conditions_in_item.Cond_Value = objDetalle.DctoZD06.Importe;
                        t_conditions_in_item.Cond_St_No = "111";
                        t_conditions_in_item.Cond_Count = "01";
                        t_conditions_in.Add(t_conditions_in_item);
                    }
                    else if (objDetalle.DctoZD07.Importe != 0m)
                    {
                        t_conditions_in_item = new BAPICOND();
                        t_conditions_in_item.Itm_Number = objDetalle.Posicion;
                        t_conditions_in_item.Cond_Type = objDetalle.DctoZD07.Condicion;
                        t_conditions_in_item.Cond_Value = objDetalle.DctoZD07.Importe;
                        t_conditions_in_item.Cond_St_No = "112";
                        t_conditions_in_item.Cond_Count = "01";
                        t_conditions_in.Add(t_conditions_in_item);
                    }

                    if (objDetalle.PreZP08.Importe != 0m)
                    {
                        t_conditions_in_item = new BAPICOND();
                        t_conditions_in_item.Itm_Number = objDetalle.Posicion;
                        t_conditions_in_item.Cond_Type = objDetalle.PreZP08.Condicion;
                        t_conditions_in_item.Cond_Value = objDetalle.PreZP08.Importe * .1m;
                        t_conditions_in_item.Cond_St_No = "111";
                        t_conditions_in_item.Cond_Count = "01";
                        t_conditions_in.Add(t_conditions_in_item);
                    }
                }
                else
                {
                    if (objDetalle.DctoDecorPorc.Importe != 0m)
                    {
                        t_conditions_in_item = new BAPICOND();
                        t_conditions_in_item.Itm_Number = objDetalle.Posicion;
                        t_conditions_in_item.Cond_Type = objDetalle.DctoDecorPorc.Condicion;
                        t_conditions_in_item.Cond_Value = objDetalle.DctoDecorPorc.Importe;
                        t_conditions_in_item.Cond_St_No = "120";
                        t_conditions_in_item.Cond_Count = "01";
                        t_conditions_in.Add(t_conditions_in_item);
                    }
                    else if (objDetalle.DctoAdicionalPorc.Importe != 0m)
                    {
                        t_conditions_in_item = new BAPICOND();
                        t_conditions_in_item.Itm_Number = objDetalle.Posicion;
                        t_conditions_in_item.Cond_Type = objDetalle.DctoAdicionalPorc.Condicion;
                        t_conditions_in_item.Cond_Value = objDetalle.DctoAdicionalPorc.Importe;
                        t_conditions_in_item.Cond_St_No = "122";
                        t_conditions_in_item.Cond_Count = "01";
                        t_conditions_in.Add(t_conditions_in_item);
                    }
                    else if (objDetalle.DctoEstadisticoPorc.Importe != 0m)
                    {
                        t_conditions_in_item = new BAPICOND();
                        t_conditions_in_item.Itm_Number = objDetalle.Posicion;
                        t_conditions_in_item.Cond_Type = objDetalle.DctoEstadisticoPorc.Condicion;
                        t_conditions_in_item.Cond_Value = objDetalle.DctoEstadisticoPorc.Importe;
                        t_conditions_in_item.Cond_St_No = "960"; //rgutierrez 17.01.2012
                        //t_conditions_in_item.Cond_St_No = "123";
                        t_conditions_in_item.Cond_Count = "01";
                        t_conditions_in.Add(t_conditions_in_item);
                    }
                    else if (objDetalle.DctoGerenciaPorc.Importe != 0m)
                    {
                        t_conditions_in_item = new BAPICOND();
                        t_conditions_in_item.Itm_Number = objDetalle.Posicion;
                        t_conditions_in_item.Cond_Type = objDetalle.DctoGerenciaPorc.Condicion;
                        t_conditions_in_item.Cond_Value = objDetalle.DctoGerenciaPorc.Importe;
                        t_conditions_in_item.Cond_St_No = "123"; //rgutierrez 17.01.2012
                        //t_conditions_in_item.Cond_St_No = "124";
                        t_conditions_in_item.Cond_Count = "01";
                        t_conditions_in.Add(t_conditions_in_item);
                    }
                    else if (objDetalle.DctoGerenciaMonto.Importe != 0m)
                    {
                        t_conditions_in_item = new BAPICOND();
                        t_conditions_in_item.Itm_Number = objDetalle.Posicion;
                        t_conditions_in_item.Cond_Type = objDetalle.DctoGerenciaMonto.Condicion;
                        t_conditions_in_item.Cond_Value = objDetalle.DctoGerenciaMonto.Importe * .1m;
                        t_conditions_in_item.Cond_St_No = "125";
                        t_conditions_in_item.Cond_Count = "01";
                        t_conditions_in.Add(t_conditions_in_item);
                    }
                    if (objDetalle.DctoGenerico.Importe != 0m)
                    {
                        t_conditions_in_item = new BAPICOND();
                        t_conditions_in_item.Itm_Number = objDetalle.Posicion;
                        t_conditions_in_item.Cond_Type = objDetalle.DctoGenerico.Condicion;
                        t_conditions_in_item.Cond_Value = objDetalle.DctoGenerico.Importe;
                        t_conditions_in_item.Cond_St_No = "121"; //rgutierrez 16.01.2012
                        //t_conditions_in_item.Cond_St_No = "126";
                        t_conditions_in_item.Cond_Count = "01";
                        t_conditions_in.Add(t_conditions_in_item);
                    }
                    if (objDetalle.DctoZD11.Importe != 0m)
                    {
                        t_conditions_in_item = new BAPICOND();
                        t_conditions_in_item.Itm_Number = objDetalle.Posicion;
                        t_conditions_in_item.Cond_Type = ParametroDALC.getParamValueStatic("CondZD11");
                        t_conditions_in_item.Cond_Value = objDetalle.DctoZD11.Importe;
                        t_conditions_in_item.Cond_St_No = "124"; //rgutierrez 17.01.2012
                        //t_conditions_in_item.Cond_St_No = "127";
                        t_conditions_in_item.Cond_Count = "01";
                        t_conditions_in.Add(t_conditions_in_item);
                    }

                    if (objDetalle.DctoGenericoZD08.Importe != 0m)
                    {
                        t_conditions_in_item = new BAPICOND();
                        t_conditions_in_item.Itm_Number = objDetalle.Posicion;
                        t_conditions_in_item.Cond_Type = ParametroDALC.getParamValueStatic("CondDctosZD08");
                        t_conditions_in_item.Cond_Value = objDetalle.DctoGenericoZD08.Importe;
                        t_conditions_in_item.Cond_St_No = "113"; //rgutierrez 17.01.2012
                        //t_conditions_in_item.Cond_St_No = "128";
                        t_conditions_in_item.Cond_Count = "01";
                        t_conditions_in.Add(t_conditions_in_item);

                        //dsGenerico = item3.Kwert;
                    }
                    if (objDetalle.DsctoAdicionalZD12.Importe != 0m)
                    {
                        t_conditions_in_item = new BAPICOND();
                        t_conditions_in_item.Itm_Number = objDetalle.Posicion;
                        t_conditions_in_item.Cond_Type = ParametroDALC.getParamValueStatic("CondDctosAdicional");
                        t_conditions_in_item.Cond_Value = objDetalle.DsctoAdicionalZD12.Importe;
                        t_conditions_in_item.Cond_St_No = "130";
                        t_conditions_in_item.Cond_Count = "01";
                        t_conditions_in.Add(t_conditions_in_item);
                    }
                }
            }

            BAPISDTEXTTable t_text = new BAPISDTEXTTable();
            int conta = 0;
            foreach (TextoBE objTextoItm in pObjPedido.Textos)
            {
                /* problema resvis1
                 * NO SE PUEDEN VISUALIZAR TEXTOS MAYORES A 132 POR RESTRICCION DE LA TABLA T_TEXT
                 * BAPISDTEXT itm = new BAPISDTEXT();
                itm.Text_Id = objTextoItm.CodTexto;
                itm.Text_Line = objTextoItm.Descripcion;
                itm.Langu = objTextoItm.Langu;
                t_text.Add(itm);*/

                //SOLUCION resvis1
                conta = 0;
                if (objTextoItm.Descripcion.Length > 132)
                {
                    string texto = objTextoItm.Descripcion;
                    int longitudCadena = texto.Length;
                    string temp = "";
                    while (texto.Length > 132 || longitudCadena > 0)
                    {
                        int newIndice = 0;
                        if (conta == 0 || texto.Length > 132) newIndice = 132;
                        else newIndice = texto.Length;
                        string linea = texto.Substring(0, newIndice);
                        texto = texto.Substring(newIndice);
                        longitudCadena = longitudCadena - newIndice;
                        conta = conta + 1;
                        string valor_cont = "";
                        valor_cont = conta.ToString();
                        temp = temp + linea;
                        BAPISDTEXT itm = new BAPISDTEXT();
                        itm.Text_Id = objTextoItm.CodTexto;
                        itm.Text_Line = linea;
                        itm.Langu = objTextoItm.Langu;
                        //itm.Format_Col = valor_cont;//NO FUNCIONA INGRESANDO EL FORMAT_COL
                        t_text.Add(itm);
                    }

                }
                else
                {
                    BAPISDTEXT itm = new BAPISDTEXT();
                    itm.Text_Id = objTextoItm.CodTexto;
                    itm.Text_Line = objTextoItm.Descripcion;
                    itm.Langu = objTextoItm.Langu;
                    t_text.Add(itm);
                }
                //----------------------
            }

            BAPIRET2Table t_return = new BAPIRET2Table();

            //-- conexion
            PedidosProxy proxy = new PedidosProxy();
            proxy.Connection = DALC.getConnection;
            try
            {
                if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            }
            catch
            {
                throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
            }
            //-- verificar si se crea pedido/NC o oferta:
            if (ParametroDALC.esOferta(pObjPedido.CodTipoDoc) && !pObjPedido.CodTipoDoc.Equals("Z004"))
            {

                ////foreach (InterlocutorBE pa in pObjPedido.Interlocutores)
                ////{
                ////    BAPIPARNR iop =t_partners[ t_partners.FindBy("Addr_Link", pa.Funcion)];
                ////    iop["Addr_Link"] = pa.Addr_Link;                    
                ////}

                proxy.Zweb_Modificar_Oferta(pObjPedido.NumPedido, out p_Ok, ref t_conditions_in, ref t_header_in,
                                            ref t_item_in, ref t_partners, ref t_return, ref t_schdl_in, ref t_text);
            }
            else
            {
                if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodNCND"))
                {
                    t_schdl_in = new BAPISCHDLTable();
                }

                proxy.Zweb_Modificar_Pedido(pObjPedido.NumPedido, out p_Ok, ref t_conditions_in, ref t_header_in,
                                            ref t_item_in, ref t_partners, ref t_return, ref t_schdl_in, ref t_text);
            }


            SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            proxy.Connection = null;
            //-------------------

            string retVal = "", retMsg = "";
            foreach (BAPIRET2 itemRet in t_return)
            {
                retVal += (itemRet.Type == "E") || (itemRet.Type == "A") ? itemRet.Message + " " : "";
                retMsg += (itemRet.Type != "S" && itemRet.Type != "W") ? itemRet.Message + " " : "";
            }
            if (string.IsNullOrEmpty(retVal))
            {
                pOk = true;
                ClienteBE objClienteBE = (ClienteDALC.Instance()).leer(pObjPedido.CodCliente);
                if (objClienteBE != null && objClienteBE.Eventual)
                {
                    //--- grabar nif
                    //this.grabarNIF(pObjPedido);
                }
                BAPIRET2 itemRet = t_return[t_return.Count - 1];
                if (itemRet.Type == "S")
                {
                    retVal += itemRet.Message + " ";
                }
                else
                {
                    retVal += "Doc. de venta " + pObjPedido.NumPedido + " se ha grabado. ";
                }
            }
            else
            {
                pOk = false;
                //--- si hubo error, muestra todo el mensaje de error.
                retVal = retMsg;
            }
            return retVal;
        }

        /// <summary>
        /// Genero el reaprovisionamiento
        /// </summary>
        /// <param name="pObjPedido">Objeto que contiene la información del pedido/oferta</param>
        /// <returns>mensaje resultado</returns>
        public string reaprovisionar(out bool pOk, PedidoBE pObjPedido)
        {
            PedidoBE retObj = new PedidoBE(); List<DetalleBE> lstDetalle = new List<DetalleBE>();
            //-------------------
            string p_Ok = "";
            pOk = true;

            //-- cabecera
            BAPISDH1Table t_header_in = new BAPISDH1Table();
            BAPISDH1 t_header_in_item = new BAPISDH1();

            t_header_in_item.Sales_Grp = pObjPedido.CodGrupoVend;
            t_header_in_item.Sales_Off = pObjPedido.CodOficina;
            t_header_in_item.Distr_Chan = pObjPedido.CanalDist;
            t_header_in_item.Sales_Org = pObjPedido.OrgVentas;

            //t_header_in_item.Req_Date_H = ParametroDALC.dateNetToSap(pObjPedido.FechaEntrega);
            t_header_in_item.Req_Date_H = ParametroDALC.dateNetToSap(pObjPedido.Fecha);
            t_header_in_item.Doc_Date = ParametroDALC.dateNetToSap(pObjPedido.Fecha);

            t_header_in_item.Bill_Date = ParametroDALC.dateNetToSap(pObjPedido.FechaFacturacion);//////

            t_header_in_item.Dlv_Block = pObjPedido.BloqueoEntrega;
            t_header_in_item.Bill_Block = pObjPedido.BloqueoFactura;
            t_header_in_item.Cstcndgrp1 = pObjPedido.GrupoCond;
            t_header_in_item.Ord_Reason = pObjPedido.Motivo;

            t_header_in_item.Pmnttrms = pObjPedido.CondPago;

            t_header_in_item.Ship_Cond = pObjPedido.CondExp;
            t_header_in_item.Purch_No_C = pObjPedido.OrdenCompra;
            t_header_in_item.Currency = pObjPedido.Moneda;

            //modificar validez de la oferta:
            if (ParametroDALC.esOferta(pObjPedido.CodTipoDoc))
            {
                t_header_in_item.Qt_Valid_T = ParametroDALC.dateNetToSap(pObjPedido.FechaValidez);
            }

            //--- Campos Zs Servicios
            t_header_in_item.Add_Val_Dy = pObjPedido.Znpiso;
            t_header_in_item.Tax_Class9 = pObjPedido.Zasensor ? "X" : "";
            t_header_in_item.Tax_Class8 = pObjPedido.Ztransporte;//F,FE,I,E
            //-------------------
            t_header_in.Add(t_header_in_item);

            //-- interlocutores
            BAPIPARNRTable t_partners = new BAPIPARNRTable();
            foreach (InterlocutorBE iloc in pObjPedido.Interlocutores)
            {
                BAPIPARNR t_partners_item = new BAPIPARNR();
                t_partners_item.Partn_Role = iloc.Funcion;
                t_partners_item.Refobjkey = pObjPedido.Mail;
                if (iloc.Funcion.Equals("Z3"))
                {
                    t_partners_item.Name = iloc.Cliente.Descripcion;
                }
                if (ParametroDALC.esTipoX(iloc.Funcion, "IlocEmpresa"))
                {
                    if (!string.IsNullOrEmpty(iloc.Cliente.Codigo))
                    {
                        t_partners_item.Partn_Numb = iloc.Cliente.Codigo;
                        if (!iloc.Funcion.Equals(ParametroDALC.getParamValueStatic("IlocAgTrans")))
                        {
                            t_partners_item.Name = iloc.Cliente.Descripcion.Length > 35 ? iloc.Cliente.Descripcion.Substring(0, 35) : iloc.Cliente.Descripcion;
                            t_partners_item.Name_2 = iloc.Cliente.Descripcion.Length > 35 ? iloc.Cliente.Descripcion.Substring(35) : "";
                            //-----------
                            t_partners_item.Street = iloc.Cliente.Direccion;
                            t_partners_item.Postl_Code = iloc.Cliente.CodigoPostal;
                            t_partners_item.City = iloc.Cliente.Ciudad;
                            t_partners_item.Telephone = iloc.Cliente.Telefono;
                            //--- falta tabla para mails...
                            //paddr = new BAPIADDR1();
                            //paddr.E_Mail = objInter.Cliente.Mail;
                            t_partners_item.Title = ParametroDALC.getParamValueStatic("Tratamiento");
                            t_partners_item.Langu = "S";

                        }
                        t_partners_item.Country = iloc.Cliente.Pais;

                        t_partners.Add(t_partners_item);
                    }
                }
                else if (ParametroDALC.esTipoX(iloc.Funcion, "IlocPersona"))
                {
                    if (!string.IsNullOrEmpty(iloc.Persona.CodPersona))
                    {
                        t_partners_item.Country = "PE";
                        t_partners_item.Langu = "S";
                        t_partners_item.Title = ParametroDALC.getParamValueStatic("Tratamiento");
                        t_partners_item.Partn_Numb = iloc.Persona.CodPersona;
                        t_partners.Add(t_partners_item);
                    }
                }
            }
            //siempre tiene q mandar el Encargado Comercial!
            string pFuncEncComercial = ParametroDALC.getParamValueStatic("IlocVendedor1");
            int idx = t_partners.FindBy("Partn_Role", pFuncEncComercial);
            if (idx <= 0)
            {
                BAPIPARNR t_partners_itemVE = new BAPIPARNR();
                t_partners_itemVE.Partn_Role = pFuncEncComercial;
                t_partners.Add(t_partners_itemVE);
            }
            //----
            BAPISCHDLTable t_schdl_in = new BAPISCHDLTable();
            BAPISDITMTable t_item_in = new BAPISDITMTable();
            BAPICONDTable t_conditions_in = new BAPICONDTable();

            foreach (DetalleBE objDetalle in pObjPedido.Detalle)
            {
                //--- schedule / vbep / repartos
                BAPISCHDL t_schdl_in_item;
                foreach (RepartoBE itmRep in objDetalle.Repartos)
                {
                    if (itmRep.CantPed > 0m || itmRep.CantConf > 0m)
                    {
                        t_schdl_in_item = new BAPISCHDL();
                        t_schdl_in_item.Itm_Number = objDetalle.Posicion;
                        t_schdl_in_item.Sched_Line = itmRep.Pos;

                        if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodReserva"))
                        {

                            itmRep.FechaEntrega = pObjPedido.Fecha.AddDays(Convert.ToDouble(ParametroDALC.getParamValueStatic("ValidezReserva")));
                        }
                        t_schdl_in_item.Req_Date = ParametroDALC.dateNetToSap(itmRep.FechaEntrega);

                        //validación de documento de transporte:
                        if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodTransporte"))
                        {
                            t_schdl_in_item.Req_Qty = 1m;
                        }
                        else
                        {
                            t_schdl_in_item.Req_Qty = itmRep.CantPed;
                        }

                        t_schdl_in.Add(t_schdl_in_item);
                    }
                }
                //-----------------------------------

                BAPISDITM t_item_in_item = new BAPISDITM();
                t_item_in_item.Itm_Number = objDetalle.Posicion;
                t_item_in_item.Material = objDetalle.CodMaterial;

                //-- para modificar la fecha de entrega...
                //t_item_in_item.Bill_Date = ParametroDALC.dateNetToSap(objDetalle.FechaEntrega);

                //validación de documento de transporte:
                //if (pObjPedido.CodTipoDoc == ParametroDALC.getParamValueStatic("CodTransporte"))
                if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodTransporte"))
                {
                    t_item_in_item.Untof_Wght = "KG";
                    t_item_in_item.Gross_Wght = objDetalle.Cantidad;
                    t_item_in_item.Net_Weight = objDetalle.Cantidad;
                    t_item_in_item.Target_Qty = 1m;
                }
                else
                {
                    t_item_in_item.Untof_Wght = "KG";
                    t_item_in_item.Gross_Wght = objDetalle.PesoNeto;
                    t_item_in_item.Net_Weight = objDetalle.PesoNeto;
                    t_item_in_item.Target_Qty = objDetalle.Cantidad;
                }

                //t_item_in_item.Target_Qu = objDetalle.CodUMedida;
                t_item_in_item.Plant = objDetalle.CodCentro;
                t_item_in_item.Store_Loc = objDetalle.CodAlmacen;
                t_item_in_item.Batch = objDetalle.CodLote;

                t_item_in_item.Dlv_Prio = objDetalle.PrioridadEntrega;
                t_item_in_item.Prc_Group1 = objDetalle.CodGrupoMat;
                t_item_in_item.Reason_Rej = objDetalle.MotivoRechazo;

                t_item_in_item.Short_Text = objDetalle.DescMaterial;
                //--- tipo de posición
                t_item_in_item.Item_Categ = objDetalle.TipoPosicion;
                t_item_in_item.Hg_Lv_Item = objDetalle.PosSup;

                //si es tipopos cabecera Combo, busca los hijos para cambiar reparto, grp mat, 
                if (ParametroDALC.esTipoCabComboStatic(objDetalle.TipoPosicion) &&
                    ParametroDALC.esTipoCabKitStatic(objDetalle.TipoPosicion))
                {
                    List<DetalleBE> lstAux = pObjPedido.Detalle.FindAll(X => X.PosSup == objDetalle.Posicion);
                    foreach (DetalleBE itmAux in lstAux)
                    {
                        itmAux.Cantidad = itmAux.CantComp * objDetalle.Cantidad;
                        //si UM = UNidad => redondear al entero mayor
                        if (ParametroDALC.esTipoX(itmAux.CodUMedida, "UMUnidad"))
                        {
                            itmAux.Cantidad = (itmAux.Cantidad > decimal.Truncate(itmAux.Cantidad)) ? decimal.Truncate(itmAux.Cantidad) + 1 : itmAux.Cantidad;
                        }

                        itmAux.CodGrupoMat = objDetalle.CodGrupoMat;

                        //itmAux.FechaEntrega = objDetalle.FechaEntrega;
                        itmAux.PrioridadEntrega = objDetalle.PrioridadEntrega;
                    }
                }
                //--- campos Zs Servicios
                t_item_in_item.Tax_Class9 = objDetalle.Zservicio ? "X" : "";
                //--- añadir a tabla de items
                t_item_in.Add(t_item_in_item);

                //-- condiciones
                BAPICOND t_conditions_in_item;
                //condicion de precio: ZP00 => Cond_St_No = 100

                if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodNCZP01"))
                {
                    if (objDetalle.Diferencia.Importe != 0m)
                    {
                        t_conditions_in_item = new BAPICOND();
                        t_conditions_in_item.Itm_Number = objDetalle.Posicion;
                        t_conditions_in_item.Cond_Type = objDetalle.Diferencia.Condicion;
                        t_conditions_in_item.Cond_Value = objDetalle.Diferencia.Importe * .1m;
                        t_conditions_in_item.Cond_St_No = "111";
                        t_conditions_in_item.Cond_Count = "01";
                        t_conditions_in.Add(t_conditions_in_item);
                    }
                }
                else if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodPedServ"))
                {
                    if (objDetalle.DctoZD06.Importe != 0m)
                    {
                        t_conditions_in_item = new BAPICOND();
                        t_conditions_in_item.Itm_Number = objDetalle.Posicion;
                        t_conditions_in_item.Cond_Type = objDetalle.DctoZD06.Condicion;
                        t_conditions_in_item.Cond_Value = objDetalle.DctoZD06.Importe;
                        t_conditions_in_item.Cond_St_No = "111";
                        t_conditions_in_item.Cond_Count = "01";
                        t_conditions_in.Add(t_conditions_in_item);
                    }
                    else if (objDetalle.DctoZD07.Importe != 0m)
                    {
                        t_conditions_in_item = new BAPICOND();
                        t_conditions_in_item.Itm_Number = objDetalle.Posicion;
                        t_conditions_in_item.Cond_Type = objDetalle.DctoZD07.Condicion;
                        t_conditions_in_item.Cond_Value = objDetalle.DctoZD07.Importe;
                        t_conditions_in_item.Cond_St_No = "112";
                        t_conditions_in_item.Cond_Count = "01";
                        t_conditions_in.Add(t_conditions_in_item);
                    }

                    if (objDetalle.PreZP08.Importe != 0m)
                    {
                        t_conditions_in_item = new BAPICOND();
                        t_conditions_in_item.Itm_Number = objDetalle.Posicion;
                        t_conditions_in_item.Cond_Type = objDetalle.PreZP08.Condicion;
                        t_conditions_in_item.Cond_Value = objDetalle.PreZP08.Importe * .1m;
                        t_conditions_in_item.Cond_St_No = "111";
                        t_conditions_in_item.Cond_Count = "01";
                        t_conditions_in.Add(t_conditions_in_item);
                    }
                }
                else
                {
                    if (objDetalle.DctoDecorPorc.Importe != 0m)
                    {
                        t_conditions_in_item = new BAPICOND();
                        t_conditions_in_item.Itm_Number = objDetalle.Posicion;
                        t_conditions_in_item.Cond_Type = objDetalle.DctoDecorPorc.Condicion;
                        t_conditions_in_item.Cond_Value = objDetalle.DctoDecorPorc.Importe;
                        t_conditions_in_item.Cond_St_No = "120";
                        t_conditions_in_item.Cond_Count = "01";
                        t_conditions_in.Add(t_conditions_in_item);
                    }
                    else if (objDetalle.DctoAdicionalPorc.Importe != 0m)
                    {
                        t_conditions_in_item = new BAPICOND();
                        t_conditions_in_item.Itm_Number = objDetalle.Posicion;
                        t_conditions_in_item.Cond_Type = objDetalle.DctoAdicionalPorc.Condicion;
                        t_conditions_in_item.Cond_Value = objDetalle.DctoAdicionalPorc.Importe;
                        t_conditions_in_item.Cond_St_No = "122";
                        t_conditions_in_item.Cond_Count = "01";
                        t_conditions_in.Add(t_conditions_in_item);
                    }
                    else if (objDetalle.DctoEstadisticoPorc.Importe != 0m)
                    {
                        t_conditions_in_item = new BAPICOND();
                        t_conditions_in_item.Itm_Number = objDetalle.Posicion;
                        t_conditions_in_item.Cond_Type = objDetalle.DctoEstadisticoPorc.Condicion;
                        t_conditions_in_item.Cond_Value = objDetalle.DctoEstadisticoPorc.Importe;
                        t_conditions_in_item.Cond_St_No = "123";
                        t_conditions_in_item.Cond_Count = "01";
                        t_conditions_in.Add(t_conditions_in_item);
                    }
                    else if (objDetalle.DctoGerenciaPorc.Importe != 0m)
                    {
                        t_conditions_in_item = new BAPICOND();
                        t_conditions_in_item.Itm_Number = objDetalle.Posicion;
                        t_conditions_in_item.Cond_Type = objDetalle.DctoGerenciaPorc.Condicion;
                        t_conditions_in_item.Cond_Value = objDetalle.DctoGerenciaPorc.Importe;
                        t_conditions_in_item.Cond_St_No = "124";
                        t_conditions_in_item.Cond_Count = "01";
                        t_conditions_in.Add(t_conditions_in_item);
                    }
                    else if (objDetalle.DctoGerenciaMonto.Importe != 0m)
                    {
                        t_conditions_in_item = new BAPICOND();
                        t_conditions_in_item.Itm_Number = objDetalle.Posicion;
                        t_conditions_in_item.Cond_Type = objDetalle.DctoGerenciaMonto.Condicion;
                        t_conditions_in_item.Cond_Value = objDetalle.DctoGerenciaMonto.Importe * .1m;
                        t_conditions_in_item.Cond_St_No = "125";
                        t_conditions_in_item.Cond_Count = "01";
                        t_conditions_in.Add(t_conditions_in_item);
                    }
                    else if (objDetalle.DsctoAdicionalZD12.Importe != 0m) //rhuapaya 25.06.2012 @@@
                    {
                        t_conditions_in_item = new BAPICOND();
                        t_conditions_in_item.Itm_Number = objDetalle.Posicion;
                        t_conditions_in_item.Cond_Type = objDetalle.DsctoAdicionalZD12.Condicion;
                        t_conditions_in_item.Cond_Value = objDetalle.DsctoAdicionalZD12.Importe * .1m;
                        t_conditions_in_item.Cond_St_No = "130";
                        t_conditions_in_item.Cond_Count = "01";
                        t_conditions_in.Add(t_conditions_in_item);
                    }
                }
            }

            BAPISDTEXTTable t_text = new BAPISDTEXTTable();
            foreach (TextoBE objTextoItm in pObjPedido.Textos)
            {
                BAPISDTEXT itm = new BAPISDTEXT();
                itm.Text_Id = objTextoItm.CodTexto;
                itm.Text_Line = objTextoItm.Descripcion;
                itm.Langu = objTextoItm.Langu;

                t_text.Add(itm);
            }

            BAPIRET2Table t_return = new BAPIRET2Table();

            //-- conexion
            PedidosProxy proxy = new PedidosProxy();
            proxy.Connection = DALC.getConnection;
            try
            {
                if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            }
            catch
            {
                throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
            }
            //-- verificar si se crea pedido/NC o oferta:


            proxy.Zweb_Reaprovisionar(pObjPedido.NumPedido, out p_Ok, ref t_conditions_in, ref t_header_in,
                                            ref t_item_in, ref t_partners, ref t_return, ref t_schdl_in, ref t_text);

            SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            proxy.Connection = null;
            //-------------------

            string retVal = "", retMsg = "";
            foreach (BAPIRET2 itemRet in t_return)
            {
                retVal += (itemRet.Type != "S") ? itemRet.Message + "\n" : "";
                retMsg += (itemRet.Type == "S") ? itemRet.Message + "\n" : "";
            }
            if (string.IsNullOrEmpty(retVal))
            {
                pOk = true;
                BAPIRET2 itemRet = t_return[t_return.Count - 1];
                if (itemRet.Type == "S" && !itemRet.Message.Equals(""))
                {
                    retVal = "Las posiciones " + itemRet.Message + " fueron reaprovisionadas. El pedido fue grabado." + "\n";
                    retVal.Replace('/', '-');
                }
                else
                    retVal = "No fue reaprovisionado el pedido \n";

            }
            else
            {
                pOk = false;
            }


            return retVal;
        }


        /// <summary>
        /// función para calcular los precios (Zweb_Calcular_Precio)
        /// </summary>
        /// <param name="pObjPedido">obj con info del doc.</param>
        /// <param name="pItem">obj con el item que se va a tratar</param>
        /// <param name="retval">mensaje de error o vacío si no hay error</param>
        /// <returns>Lista de condiciones</returns>
        public List<DescuentoBE> calcularPrecios(PedidoBE pObjPedido, DetalleBE pItem, out string retval)
        {
            string p_Ok = "", p_Msg = "", p_band = "";
            BAPICONDTable t_cond = new BAPICONDTable();

            BAPICOND itm;


            if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodPedServ"))
            {// Enviar precio especial cuando es flete/servicio especial
                if (pItem.Material.EspecialServ || ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodPedProy"))
                {
                    if (pItem.PreZP08 != null && pItem.PreZP08.Importe != 0m)
                    {
                        itm = new BAPICOND();
                        itm.Itm_Number = pItem.Posicion;
                        itm.Cond_Type = pItem.PreZP08.Condicion;
                        itm.Cond_Value = pItem.PreZP08.Importe;
                        t_cond.Add(itm);
                    }
                }
            }
            //if (pItem.Precio != null && pItem.Precio.Importe != 0m)
            {
                itm = new BAPICOND();
                itm.Itm_Number = pItem.Posicion;
                itm.Cond_Type = ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodPedServ") ? "ZP07" : pItem.Precio.Condicion;
                if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodPedServ2")) itm.Cond_Type = "ZP03"; // mtejada: 25.08.2011 para docs Z005 y ZO02
                itm.Cond_Value = pItem.Precio.Importe;
                //itm.Currency = pObjPedido.Moneda;

                t_cond.Add(itm);
            }

            if (pItem.DctoDecorPorc != null && pItem.DctoDecorPorc.Importe != 0m)
            {
                itm = new BAPICOND();
                itm.Itm_Number = pItem.Posicion;
                itm.Cond_Type = pItem.DctoDecorPorc.Condicion;


                //rgutierrez 13.01.2012 Al modificar el descuento se estaba aplicando nuevamente la rebaja de 3% para pago con tarjeta de credito
                itm.Cond_Value = Math.Abs(pItem.DctoDecorPorc.Importe);
                //itm.Cond_Value = Math.Abs(pItem.DctoDecorPorc.Importe);

                //itm.Currency = pObjPedido.Moneda;

                //if (!(pItem.DctoDecorPorc.ImporteAnterior == 0m))
                {
                    if (pItem.DctoDecorPorc.ImporteAnterior != pItem.DctoDecorPorc.Importe)
                    {
                        p_band = "1";
                    }
                }

                t_cond.Add(itm);
            }
            //if (pItem.DctoEstadisticoPorc != null && pItem.DctoEstadisticoPorc.Importe != 0m)
            //{
            //    itm = new BAPICOND();
            //    itm.Itm_Number = pItem.Posicion;
            //    itm.Cond_Type = pItem.DctoEstadisticoPorc.Condicion;
            //    itm.Cond_Value = pItem.DctoEstadisticoPorc.Importe;
            //    t_cond.Add(itm);
            //}
            if (pItem.DctoAdicionalPorc != null && pItem.DctoAdicionalPorc.Importe != 0m)
            {
                itm = new BAPICOND();
                itm.Itm_Number = pItem.Posicion;
                itm.Cond_Type = pItem.DctoAdicionalPorc.Condicion;

                //rgutierrez 13.01.2012
                itm.Cond_Value = Math.Abs(pItem.DctoAdicionalPorc.Importe);
                //itm.Cond_Value = Math.Abs(pItem.DctoAdicionalPorc.Importe);

                //itm.Currency = pObjPedido.Moneda;
                t_cond.Add(itm);
            }
            if (pItem.DctoGerenciaPorc != null && pItem.DctoGerenciaPorc.Importe != 0m)
            {
                itm = new BAPICOND();
                itm.Itm_Number = pItem.Posicion;
                itm.Cond_Type = pItem.DctoGerenciaPorc.Condicion;

                //rgutierrez 13.01.2012
                itm.Cond_Value = Math.Abs(pItem.DctoGerenciaPorc.Importe);
                //itm.Cond_Value = Math.Abs(pItem.DctoGerenciaPorc.Importe);

                //itm.Currency = pObjPedido.Moneda;
                t_cond.Add(itm);
            }
            if (pItem.DctoGerenciaMonto != null && pItem.DctoGerenciaMonto.Importe != 0m)
            {
                itm = new BAPICOND();
                itm.Itm_Number = pItem.Posicion;
                itm.Cond_Type = pItem.DctoGerenciaMonto.Condicion;

                //rgutierrez 13.01.2012
                itm.Cond_Value = Math.Abs(pItem.DctoGerenciaMonto.Importe);
                //itm.Cond_Value = Math.Abs(pItem.DctoGerenciaMonto.Importe);

                //itm.Currency = pObjPedido.Moneda;
                t_cond.Add(itm);
            }

            //---
            if (pItem.DctoZD06 != null && pItem.DctoZD06.Importe != 0m)
            {
                itm = new BAPICOND();
                itm.Itm_Number = pItem.Posicion;
                itm.Cond_Type = pItem.DctoZD06.Condicion;

                //rgutierrez 13.01.2012
                itm.Cond_Value = Math.Abs(pItem.DctoZD06.Importe);
                //itm.Cond_Value = Math.Abs(pItem.DctoZD06.Importe);

                //itm.Currency = pObjPedido.Moneda;
                t_cond.Add(itm);
            }

            //RGF 20111108
            if (pItem.DctoGenericoZD08 != null && pItem.DctoGenericoZD08.Importe != 0m)
            {
                itm = new BAPICOND();
                itm.Itm_Number = pItem.Posicion;
                itm.Cond_Type = pItem.DctoGenericoZD08.Condicion;

                //rgutierrez 13.01.2012
                itm.Cond_Value = Math.Abs(pItem.DctoGenericoZD08.Importe);
                //itm.Cond_Value = Math.Abs(pItem.DctoGenericoZD08.Importe);

                //itm.Currency = pObjPedido.Moneda;
                t_cond.Add(itm);
            }

            //rgutierrez 10.01.2012
            if (pItem.DctoGenerico != null && pItem.DctoGenerico.Importe != 0m) //ZD09
            {
                itm = new BAPICOND();
                itm.Itm_Number = pItem.Posicion;
                itm.Cond_Type = pItem.DctoGenerico.Condicion;

                //rgutierrez 13.01.2012
                itm.Cond_Value = Math.Abs(pItem.DctoGenerico.Importe);
                //itm.Cond_Value = Math.Abs(pItem.DctoGenerico.Importe);

                t_cond.Add(itm);
            }
            if (pItem.DctoZD11 != null && pItem.DctoZD11.Importe != 0m)
            {
                itm = new BAPICOND();
                itm.Itm_Number = pItem.Posicion;
                itm.Cond_Type = pItem.DctoZD11.Condicion;

                //rgutierrez 13.01.2012
                itm.Cond_Value = Math.Abs(pItem.DctoZD11.Importe);
                //itm.Cond_Value = Math.Abs(pItem.DctoZD11.Importe);

                t_cond.Add(itm);
            }
            //rhuapaya 25.06.2012 @@@
            if (pItem.DsctoAdicionalZD12 != null && pItem.DsctoAdicionalZD12.Importe != 0m)
            {
                itm = new BAPICOND();
                itm.Itm_Number = pItem.Posicion;
                itm.Cond_Type = "ZD12"; // pItem.DsctoAdicionalZD12.Condicion;
                itm.Cond_Value = Math.Abs(pItem.DsctoAdicionalZD12.Importe);
                t_cond.Add(itm);
            }

            //si se ingresó Diferencia y es una NC x dif precio:
            if (pItem.Diferencia != null && pItem.Diferencia.Importe != 0m &&
                ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodNCZP01"))
            {
                //--- borrar todos los dctos
                t_cond.Clear();
                //--- añadir de nuevo la cond de precio
                itm = new BAPICOND();
                itm.Itm_Number = pItem.Posicion;
                itm.Cond_Type = pItem.Precio.Condicion;
                itm.Cond_Value = Math.Abs(pItem.Precio.Importe);
                //itm.Currency = pObjPedido.Moneda;
                t_cond.Add(itm);

                //--- añadir condición diferencia de precio
                itm = new BAPICOND();
                itm.Itm_Number = pItem.Posicion;
                itm.Cond_Type = pItem.Diferencia.Condicion;
                itm.Cond_Value = Math.Abs(pItem.Diferencia.Importe);
                //itm.Currency = pObjPedido.Moneda;
                t_cond.Add(itm);
            }
            else if (ParametroDALC.esTipoX(pObjPedido.CodTipoDoc, "CodMuestraGarantia"))
            {
                t_cond = new BAPICONDTable();
            }

            //if (t_cond.Count == 1 && !t_cond[0].Cond_Type.Equals("ZP07")) 
            if (t_cond.Count == 1 && !t_cond[0].Cond_Type.Equals("ZP07") && !t_cond[0].Cond_Type.Equals("ZP03"))  //RGF 20111107
            {
                t_cond = new BAPICONDTable();
            }

            MaterialDALC pObjMaterialDALC = MaterialDALC.Instance();
            MaterialBE pObjMaterialBE = pObjMaterialDALC.leerMaterial(pItem.CodMaterial, pObjPedido.OrgVentas, pObjPedido.CanalDist);

            //-- Connection handle...
            PreciosProxy proxy = new PreciosProxy();
            proxy.Connection = DALC.getConnection;
            try
            {
                if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            }
            catch
            {
                throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
            }
            //------------------------------------------------------------------
            string pZipCode;
            try
            {
                string pIlocDM = ParametroDALC.getParamValueStatic("IlocDestMerc");
                InterlocutorBE objIlocDM = pObjPedido.Interlocutores.Find(X => X.Funcion == pIlocDM);
                pZipCode = objIlocDM.Cliente.CodigoPostal;
            }
            catch { pZipCode = string.Empty; }
            //------------------------------------------------------------------

            //--- si es primera vez y con tc => BAND = 1
            /*        proxy.Zweb_Calcular_Precio(pObjPedido.CodTipoDoc, p_band, pItem.Cantidad, pItem.CodLote, ParametroDALC.dateNetToSap(pObjPedido.Fecha),
                                                "", pObjPedido.GrupoCond, pObjPedido.CodCliente, pItem.CodMaterial,
                                                pItem.Posicion, pObjMaterialBE.Jerarquia, "", pObjPedido.DocOriginal, pObjPedido.CodOficina, pObjPedido.OrgVentas, "",
                                                pObjPedido.CanalDist, pItem.CodCentro, (pObjPedido.Zasensor ? "X" : ""), pZipCode, pObjPedido.Znpiso, pObjPedido.CondPago, pObjPedido.Ztransporte, 
                                                out p_Msg, out p_Ok, ref t_cond);*/
            //ini-percepciones- agregar dni de responsable de pago a la tabla t_cond para su validacion dentro de la funcion.

            InterlocutorBE inter = pObjPedido.Interlocutores.Find(X => X.Funcion == ParametroDALC.getParamValueStatic("IlocResPago"));

            itm = new BAPICOND();

            itm.Cond_Type = "DNI";

            if (inter.Persona.Dni != null)
            {
                itm.Refobjkey = inter.Persona.Dni;
            }
            else if (inter.Cliente.Ruc != null)
            {
                itm.Refobjkey = inter.Cliente.Ruc;
            }
            //itm.Currency = pObjPedido.Moneda;
            t_cond.Add(itm);
            //fin-percepciones

            proxy.Zweb_Calcular_Precio(pObjPedido.CodTipoDoc, pObjPedido.Motivo, p_band, pItem.Cantidad, pItem.CodLote,
                ParametroDALC.dateNetToSap(pObjPedido.Fecha),
                            "", pObjPedido.GrupoCond, pObjPedido.CodCliente, pItem.CodMaterial.PadLeft(18, '0'),
                            pItem.Posicion, pObjMaterialBE.Jerarquia, "", pObjPedido.DocOriginal.PadLeft(10, '0'),
                            pObjPedido.NumPedido.PadLeft(10, '0'), pObjPedido.CodOficina, pObjPedido.OrgVentas, "",
                            pObjPedido.CanalDist, pItem.CodCentro, (pObjPedido.Zasensor ? "X" : ""), pZipCode, pObjPedido.Znpiso,
                            pObjPedido.CondPago, pObjPedido.Ztransporte,
                                        out p_Msg, out p_Ok, ref t_cond);


            SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            proxy.Connection = null;
            //-------------------

            List<DescuentoBE> lstDescuentos = new List<DescuentoBE>();
            DataTable dt = t_cond.ToADODataTable();
            foreach (DataRow dr in dt.Rows)
            {
                DescuentoBE obj = new DescuentoBE();
                obj.Condicion = dr["COND_TYPE"].ToString();
                obj.Moneda = dr["CURRENCY"].ToString();
                obj.Importe = Convert.ToDecimal(dr["COND_VALUE"].ToString());
                obj.Valor = Convert.ToDecimal(dr["CONDVALUE"].ToString());

                DescuentoBE tmp = lstDescuentos.Find(X => X.Condicion == ParametroDALC.getParamValueStatic("CondPrecio1"));
                if (pObjPedido.Moneda.Equals("USD") && tmp == null &&
                    obj.Condicion != ParametroDALC.getParamValueStatic("CondDctoGerenciaMonto") &&
                    obj.Condicion != ParametroDALC.getParamValueStatic("CondPrecio1"))
                {
                    //Convertir de PEN a USD
                    obj.Valor = decimal.Round(obj.Valor / pObjPedido.TipoCambio, 2);
                    //obj.Importe = decimal.Round(obj.Importe / pObjPedido.TipoCambio, 2);
                }

                lstDescuentos.Add(obj);
            }
            retval = (p_Ok == "" ? "" : p_Msg);
            return lstDescuentos;
        }

        /// <summary>
        /// Función que retorna los status de cabecera del documento comercial.
        /// </summary>
        /// <param name="pNumPedido">nro de pedido</param>
        /// <returns>Estructura con varios status</returns>
        public StatusBE verStatus(string pNumPedido)
        {
            PedidosProxy p = new PedidosProxy();
            p.Connection = DALC.getConnection;
            try
            {
                if (!p.Connection.IsOpen) { p.Connection.Open(); }
            }
            catch
            {
                throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
            }
            VBSTT vbstt_wa = new VBSTT();
            p.Zweb_Head_Status(pNumPedido, out vbstt_wa);
            //---
            SAP.Connector.SAPConnectionPool.ReturnConnection(p.Connection);
            p.Connection = null;
            //---
            StatusBE retval = null;
            if (vbstt_wa != null)
            {
                retval = new StatusBE();
                retval.Rechazo = vbstt_wa.Absta_Bez;
                retval.Global = vbstt_wa.Gbsta_Bez;
                retval.Entrega = vbstt_wa.Lfsta_Bez;
                retval.Credito = vbstt_wa.Cmgst_Bez;
                retval.Bloqueo = vbstt_wa.Spstg_Bez;
            }
            return retval;
        }

        /// <summary>
        /// Permite visualizar el detalle del documento de entrega
        /// </summary>
        /// <param name="pVbeln">Nro de entrega</param>
        /// <returns>Lista de posiciones de la entrega</returns>
        public List<EntregaBE> verEntrega(string pVbeln, string pvbtyp_n)
        {
            PedidosProxy p = new PedidosProxy();
            p.Connection = DALC.getConnection;
            try
            {
                if (!p.Connection.IsOpen) { p.Connection.Open(); }
            }
            catch
            {
                throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
            }
            LIPSTable lt_lips = new LIPSTable();
            VBRPTable lt_vbrp = new VBRPTable();
            VBAPTable lt_vbap = new VBAPTable();

            p.Zweb_Ver_Entrega(pVbeln, pvbtyp_n, ref lt_lips, ref lt_vbap, ref lt_vbrp);


            //---
            SAP.Connector.SAPConnectionPool.ReturnConnection(p.Connection);
            p.Connection = null;
            //---
            List<EntregaBE> lstEntregas = new List<EntregaBE>();
            EntregaBE objEntrega;

            if (pvbtyp_n == "B" || pvbtyp_n == "C" || pvbtyp_n == "K" || pvbtyp_n == "H")
            {
                //Documento de ventas: Datos de posición
                foreach (VBAP ls_vbap in lt_vbap)
                {
                    objEntrega = new EntregaBE();
                    objEntrega.Vbeln = ls_vbap.Vbeln;
                    objEntrega.Posnr = ls_vbap.Posnr;
                    objEntrega.Vgbel = ls_vbap.Vgbel;
                    objEntrega.Vgpos = ls_vbap.Vgpos;
                    objEntrega.Matnr = ls_vbap.Matnr;
                    objEntrega.Meins = ls_vbap.Meins;
                    objEntrega.Arktx = ls_vbap.Arktx;
                    objEntrega.Werks = ls_vbap.Werks;
                    objEntrega.Lgort = ls_vbap.Lgort;
                    objEntrega.Charg = ls_vbap.Charg;
                    objEntrega.Gewei = ls_vbap.Gewei;
                    objEntrega.Ntgew = ls_vbap.Ntgew;
                    objEntrega.Lfimg = ls_vbap.Kwmeng;
                    lstEntregas.Add(objEntrega);
                }

            }
            else if (pvbtyp_n == "M" || pvbtyp_n == "N" || pvbtyp_n == "O" || pvbtyp_n == "S")
            {    //Factura: Datos de posición

                foreach (VBRP ls_vbrp in lt_vbrp)
                {
                    objEntrega = new EntregaBE();
                    objEntrega.Vbeln = ls_vbrp.Vbeln;
                    objEntrega.Posnr = ls_vbrp.Posnr;
                    objEntrega.Vgbel = ls_vbrp.Vgbel;
                    objEntrega.Vgpos = ls_vbrp.Vgpos;
                    objEntrega.Matnr = ls_vbrp.Matnr;
                    objEntrega.Meins = ls_vbrp.Meins;
                    objEntrega.Arktx = ls_vbrp.Arktx;
                    objEntrega.Werks = ls_vbrp.Werks;
                    objEntrega.Lgort = ls_vbrp.Lgort;
                    objEntrega.Charg = ls_vbrp.Charg;
                    objEntrega.Gewei = ls_vbrp.Gewei;
                    objEntrega.Ntgew = ls_vbrp.Ntgew;
                    objEntrega.Lfimg = ls_vbrp.Fkimg;
                    lstEntregas.Add(objEntrega);
                }
            }
            else
            {

                foreach (LIPS ls_lips in lt_lips)
                {
                    objEntrega = new EntregaBE();
                    objEntrega.Vbeln = ls_lips.Vbeln;
                    objEntrega.Posnr = ls_lips.Posnr;
                    objEntrega.Vgbel = ls_lips.Vgbel;
                    objEntrega.Vgpos = ls_lips.Vgpos;
                    objEntrega.Matnr = ls_lips.Matnr;
                    objEntrega.Meins = ls_lips.Meins;
                    objEntrega.Arktx = ls_lips.Arktx;
                    objEntrega.Werks = ls_lips.Werks;
                    objEntrega.Lgort = ls_lips.Lgort;
                    objEntrega.Charg = ls_lips.Charg;
                    objEntrega.Gewei = ls_lips.Gewei;
                    objEntrega.Lfimg = ls_lips.Lfimg;
                    objEntrega.Ntgew = ls_lips.Ntgew;
                    lstEntregas.Add(objEntrega);
                }
            }
            return lstEntregas;
        }

        /// <summary>
        /// Devuelve la lista de documentos asociados en el flujo de un nro de pedido
        /// </summary>
        /// <param name="pNumPedido">Número de Pedido</param>
        /// <returns>Lista de documentos SeguimientoBE</returns>
        public List<SeguimientoBE> buscaDocumentos(string pNumPedido)
        {
            PedidosProxy proxy = new PedidosProxy();
            proxy.Connection = DALC.getConnection;
            try
            {
                if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            }
            catch
            {
                throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
            }
            //-----------------
            ZWEB_SEGUIMIENTO1Table t_seguim = new ZWEB_SEGUIMIENTO1Table();
            proxy.Zweb_Seguimiento(pNumPedido, ref t_seguim);
            //-----------------
            SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            proxy.Connection = null;
            //-----------------

            List<SeguimientoBE> lstSeguimiento = new List<SeguimientoBE>();
            foreach (ZWEB_SEGUIMIENTO1 item in t_seguim)
            {
                SeguimientoBE objSeguimiento;

                objSeguimiento = new SeguimientoBE();
                objSeguimiento.Jerarquia = item.Docite; //"01";
                objSeguimiento.NumDocumento = item.Docnro; //"0020000161";
                objSeguimiento.TipoDocumento = item.Doctip; //"Ofertta DECOR";
                objSeguimiento.Estado = item.Docest; //"Pendiente";
                objSeguimiento.DocSeleccionado = item.Docsel == "X" ? true : false; //true;
                objSeguimiento.Referencia = item.Xblnr;
                objSeguimiento.DocFecha = ParametroDALC.dateSapToNet(item.Docfec);
                objSeguimiento.codTipoDoc = item.Vbtyp_N;
                lstSeguimiento.Add(objSeguimiento);
            }
            return lstSeguimiento;
        }

        public void buscaDatosImpresion(string pNumPedido, out string pDireccion, out string pTelefono, out string pFax, out string pAtencion)
        {
            PedidosProxy proxy = new PedidosProxy();
            proxy.Connection = DALC.getConnection;
            if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            //-----------------
            string ex_city = "", ex_street = "";
            proxy.Zweb_Datos_Impresion(pNumPedido, out pAtencion, out ex_city, out pFax, out ex_street, out pTelefono);
            //-----------------
            SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            proxy.Connection = null;
            //-----------------
            pDireccion = (ex_street + " " + ex_city).Trim();
        }

        public List<GenericBE> buscarMotivosRechazo(string pCodMotivo)
        {
            PedidosProxy proxy = new PedidosProxy();
            proxy.Connection = DALC.getConnection;
            try
            {
                if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            }
            catch
            {
                throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
            }
            //----------
            TVAGTTable t_tvagt = new TVAGTTable();
            proxy.Zweb_Lista_Motivrec(pCodMotivo, ref t_tvagt);
            SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            proxy.Connection = null;
            //----------
            List<GenericBE> lstMotivosRechazo = new List<GenericBE>();
            foreach (TVAGT item in t_tvagt)
            {
                GenericBE obj = new GenericBE();
                obj.Codigo = item.Abgru;
                obj.Descripcion = item.Bezei;

                lstMotivosRechazo.Add(obj);
            }
            return lstMotivosRechazo;
        }

        public List<DetalleBE> buscaTipoPosicion(string pCodTipoDoc, string pCodMaterial, string pOrgVtas,
                                                string pCanalDist, string pCodCentro, out string pTipoPos)
        {
            PedidosProxy proxy = new PedidosProxy();
            proxy.Connection = DALC.getConnection;
            try
            {
                if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            }
            catch
            {
                throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
            }
            //----------
            STPOTable t_stpo = new STPOTable();
            proxy.Zweb_Busca_Tipoposicion(pCodTipoDoc, pCodMaterial,
                    pOrgVtas, pCanalDist, pCodCentro, out pTipoPos, ref t_stpo);
            SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            proxy.Connection = null;
            //----------
            List<DetalleBE> lstDetalleBE = new List<DetalleBE>();
            foreach (STPO itm in t_stpo)
            {
                MaterialBE objMat = (MaterialDALC.Instance()).leerMaterial(itm.Idnrk, pOrgVtas, pCanalDist);
                DetalleBE objDetalleBE = new DetalleBE();
                //cod mat
                objDetalleBE.CodMaterial = itm.Idnrk;
                //cant
                objDetalleBE.CantComp = itm.Menge;

                objDetalleBE.Material = objMat;

                lstDetalleBE.Add(objDetalleBE);
            }

            return lstDetalleBE;
        }

        /// <summary>
        /// (Deprecated)
        /// </summary>
        /// <param name="pObjPedido"></param>
        public void buscaTipoPosicion(ref PedidoBE pObjPedido)
        {
            PedidosProxy proxy = new PedidosProxy();
            proxy.Connection = DALC.getConnection;
            if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            //----------
            string tmp = "";
            foreach (DetalleBE objDetalle in pObjPedido.Detalle)
            {
                tmp = objDetalle.TipoPosicion;

                STPOTable t_stpo = new STPOTable();
                proxy.Zweb_Busca_Tipoposicion(pObjPedido.CodTipoDoc, objDetalle.Material.CodMaterial,
                    pObjPedido.OrgVentas, pObjPedido.CanalDist, objDetalle.CodCentro, out tmp, ref t_stpo);

                objDetalle.TipoPosicion = string.IsNullOrEmpty(tmp) ? objDetalle.TipoPosicion : tmp;
            }
            //----------
            SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            proxy.Connection = null;
        }

        /// <summary>
        /// Lista pedidos en para el usuario ingresado, en el rango de fechas especificado.
        /// </summary>
        /// <param name="pCodUsuario">número de personal</param>
        /// <param name="pFecInicio">fecha inicio</param>
        /// <param name="pFecFin">fecha fin</param>
        /// <returns></returns>
        public List<PedidoBE> listaPedidos(string pNumDoc, string pCodUsuario, DateTime pFecInicio, DateTime pFecFin,
                                           string pOrgVtas, string pCanal, string pOficina, string pRefLegal)
        {
            PedidosProxy proxy = new PedidosProxy();
            proxy.Connection = DALC.getConnection;
            try
            {
                if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            }
            catch
            {
                throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
            }
            //----------
            string fecIni = ParametroDALC.dateNetToSap(pFecInicio);
            string fecFin = ParametroDALC.dateNetToSap(pFecFin);
            VBAKTable t_vbak = new VBAKTable();
            //proxy.Zweb_Lista_Pedidos(fecFin, fecIni, pCodUsuario, pNumDoc, pOficina, pOrgVtas, pCanal,pRefLegal, ref t_vbak);
            //----------
            SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            proxy.Connection = null;

            List<PedidoBE> lstPedidos = new List<PedidoBE>();
            foreach (VBAK itm in t_vbak)
            {
                PedidoBE obj = new PedidoBE();
                obj.NumPedido = itm.Vbeln;
                obj.Fecha = ParametroDALC.dateSapToNet(itm.Erdat);
                obj.CondPago = itm.Grupp;
                obj.CodTipoDoc = itm.Auart;
                //--- solo para la búsqueda y para no crear otra estructura.
                obj.CodCliente = itm.Kunnr;
                //-- nombre cliente
                obj.DestFactura = itm.Ktext;
                //-- ruc/dni cliente
                obj.DestMercaderia = itm.Ernam;

                //-- estado del documento:
                obj.Estado = itm.Crm_Guid.Trim();

                lstPedidos.Add(obj);
            }
            return lstPedidos;
        }




        /// <summary>
        /// Lista pedidos en para el usuario ingresado, en el rango de fechas especificado. Mejorado
        /// Manuel Tejada
        /// </summary>
        /// <param name="pCodUsuario">número de personal</param>
        /// <param name="pFecInicio">fecha inicio</param>
        /// <param name="pFecFin">fecha fin</param>
        /// <returns></returns>
        /// 
        public List<PedidoBE> listaPedidos(string pNumDoc, string pCodUsuario, DateTime pFecInicio, DateTime pFecFin,
                                           string pOrgVtas, string pCanal, string pOficina, string pRefLegal,
                                           string pMatrn, string pNombCli, string pStceg, string pDescMater, string pCodCli)
        {
            List<PedidoBE> lstPedidos = new List<PedidoBE>();

            PedidosProxy proxy = new PedidosProxy();
            try
            {
                proxy.Connection = DALC.getConnection;
                try
                {
                    if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
                }
                catch
                {
                    throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
                }
                //----------
                string fecIni = ParametroDALC.dateNetToSap(pFecInicio);
                string fecFin = ParametroDALC.dateNetToSap(pFecFin);

                VBAKTable t_vbak = new VBAKTable();
                if (!pRefLegal.Trim().Equals(""))
                {
                    pRefLegal = pRefLegal.Trim().PadLeft(10, '0');
                }
                else
                {
                    pRefLegal = "";
                }
                proxy.Zweb_Lista_Pedidos(pNombCli.Trim().ToUpper(), pDescMater, fecFin, fecIni, pCodCli, (pMatrn.Equals("") ? "" : pMatrn.Trim().PadLeft(18, '0')), pCodUsuario, pStceg.PadLeft(10, '0'), pNumDoc, pOficina, pOrgVtas, pCanal, pRefLegal, ref t_vbak);



                // Zweb_Lista_Pedidos( P_Ad_Name1,                 P_Fecfin,P_Fecini, string P_Matnr, string P_Pernr, string P_Stceg, string P_Vbeln, string P_Vkbur, string P_Vkorg, string P_Vtweg, string P_Xblnr, ref VBAKTable T_Vbak);
                //----------
                SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
                proxy.Connection = null;

                foreach (VBAK item in t_vbak)
                {
                    PedidoBE obj = new PedidoBE();

                    //rgutierrez 16.12.2011
                    obj.ClaseDocumento = item.Bstnk;
                    obj.TotalConIgv = item.Netwr;
                    obj.NumPedidoCorto = item.Vbeln;
                    obj.CodClienteCorto = item.Kunnr;
                    //obj.NumPedido = item.Vbeln; //itm.Vbeln;
                    //obj.CodCliente = item.Kunnr; //itm.Kunnr;

                    obj.Fecha = ParametroDALC.dateSapToNet(item.Erdat);
                    obj.CondPago = item.Grupp; //itm.Grupp;
                    obj.CodTipoDoc = item.Auart; //itm.Auart;
                    //--- solo para la búsqueda y para no crear otra estructura.
                    //-- nombre cliente
                    obj.DestFactura = item.Ktext; //itm.Ktext;
                    //-- ruc/dni cliente
                    obj.DestMercaderia = item.Ernam; //itm.Ernam;

                    //-- estado del documento:
                    obj.Estado = item.Crm_Guid; //itm.Crm_Guid.Trim();

                    lstPedidos.Add(obj);
                }

            }
            catch (Exception ex) { }

            return lstPedidos;
        }

        #endregion



        /// <summary>
        /// Devuelve la lista de interlocutores para un nro de pedido
        /// </summary>
        /// <param name="pNumPedido">Número de Pedido</param>
        /// <returns>Lista de interlocutores InterlocutorBE</returns>
        public List<InterlocutorBE> listaInterlocutores(string pNumPedido)
        {
            PedidosProxy proxy = new PedidosProxy();
            proxy.Connection = DALC.getConnection;
            try
            {
                if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            }
            catch
            {
                throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
            }
            //-----------------
            BAPIPARNRTable t_partners = new BAPIPARNRTable();
            string ex_result = "";
            proxy.Zweb_Inter_Pedido(pNumPedido, out ex_result, ref t_partners);
            //-----------------
            SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            proxy.Connection = null;
            //-----------------
            List<InterlocutorBE> lstInterlocutores = new List<InterlocutorBE>();
            InterlocutorBE objILoc;
            foreach (BAPIPARNR item in t_partners)
            {
                objILoc = new InterlocutorBE();
                objILoc.Funcion = item.Partn_Role;
                objILoc.Cliente.CodigoPostal = item.Postl_Code;
                objILoc.Cliente.Telefono = item.Telephone;

                //rgutierrez 02.12.2011
                //objILoc.Cliente.Direccion = item.Street;
                objILoc.Cliente.Direccion = item.Refobjkey;

                if (ParametroDALC.esTipoX(item.Partn_Role, "IlocEmpresa"))
                {
                    objILoc.Cliente.Codigo = item.Partn_Numb;
                    objILoc.Cliente.Descripcion = (item.Name + item.Name_2 + item.Name_3 + item.Name_4).Trim(); //rgutierrez 16.11.2011
                    //objILoc.Cliente.Descripcion = (item.Name + item.Name_2).Trim();
                    objILoc.Cliente.Ciudad = item.City;
                    objILoc.Cliente.Titulo = item.Title;
                    objILoc.Cliente.Ruc = item.Telebox;
                }
                else if (ParametroDALC.esTipoX(item.Partn_Role, "IlocPersona"))
                {
                    objILoc.Persona.CodPersona = item.Partn_Numb;
                    objILoc.Persona.Descripcion = (item.Name + " " + item.Name_2).Trim();
                }

                lstInterlocutores.Add(objILoc);
            }
            return lstInterlocutores;
        }

        /// <summary>
        /// función para grabar el NIF en pedidos con clientes eventuales
        /// </summary>
        /// <param name="pObjPedido">doc. de ventas</param>
        private void grabarNIF(PedidoBE pObjPedido)
        {
            string strRucAG = "", strRucRG = "";
            bool dniAG = false, dniRG = false;
            InterlocutorBE objSolicitante = pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocCliente"); });
            InterlocutorBE objResPago = pObjPedido.Interlocutores.Find(delegate(InterlocutorBE obj) { return obj.Funcion == ParametroDALC.getParamValueStatic("IlocResPago"); });
            if (objSolicitante != null && objSolicitante.Cliente != null)
            {
                if (!string.IsNullOrEmpty(objSolicitante.Cliente.Ruc))
                {
                    strRucAG = objSolicitante.Cliente.Ruc;
                    if (objSolicitante.Cliente.Ruc.Length == 8)
                    {
                        dniAG = true;
                    }//sino es ruc y queda en false
                }
            }
            if (objResPago != null && objResPago.Cliente != null)
            {
                if (!string.IsNullOrEmpty(objResPago.Cliente.Ruc))
                {
                    strRucRG = objResPago.Cliente.Ruc;
                    if (objResPago.Cliente.Ruc.Length == 8)
                    {
                        dniRG = true;
                    }//sino es ruc y queda en false
                }
            }

            //grabar solo si hay algún ruc
            if (!strRucAG.Equals("") || !strRucRG.Equals(""))
            {
                //-----------------------------------------
                PedidosProxy proxy = new PedidosProxy();
                proxy.Connection = DALC.getConnection;
                try
                {
                    if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
                }
                catch
                {
                    throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
                }
                //-----------------
                proxy.Zweb_Grabar_Nif(pObjPedido.CodTipoDoc, (dniAG ? "X" : ""), (dniRG ? "X" : ""), strRucAG, strRucRG, pObjPedido.NumPedido.PadLeft(10, '0'), pObjPedido.CondPago);
                //-----------------
                SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
                proxy.Connection = null;
                //-----------------
            }
        }

        /// <summary>
        /// Reporte de flete ó estiba
        /// </summary>
        /// <param name="pTipoRep"></param>
        /// <param name="pAgrupacion"></param>
        /// <param name="pOficina"></param>
        /// <param name="pFecIni"></param>
        /// <param name="pFecFin"></param>
        /// <returns></returns>
        public List<FleteBE> ListaFleteEstiba(string pTipoRep, string pAgrupacion, string pOficina, DateTime pFecIni, DateTime pFecFin)
        {
            PedidosProxy proxy = new PedidosProxy();
            proxy.Connection = DALC.getConnection;
            try
            {
                if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            }
            catch
            {
                throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
            }
            //--------------------------
            ZWEB_FILTROSTable lt_filtros = new ZWEB_FILTROSTable();
            ZWEB_FILTROS ls_filtros = new ZWEB_FILTROS();
            //---------
            ls_filtros.Field = "FECHA";
            ls_filtros.Sign = "I";
            ls_filtros.Option0 = "BT";
            ls_filtros.Low = ParametroDALC.dateNetToSap(pFecIni);
            ls_filtros.High = ParametroDALC.dateNetToSap(pFecFin);
            lt_filtros.Add(ls_filtros);

            if (pOficina != "")
            {
                ls_filtros.Field = "CENTR";
                ls_filtros.Sign = "I";
                ls_filtros.Option0 = "EQ";
                ls_filtros.Low = pOficina;
                lt_filtros.Add(ls_filtros);
            }


            ZWEB_FLETESTable lt_fletes = new ZWEB_FLETESTable();
            proxy.Zweb_Reporte_Fletes(pTipoRep, pAgrupacion, ref lt_filtros, ref lt_fletes);
            SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            proxy.Connection = null;
            //---------
            FleteBE objFlete = null;
            List<FleteBE> lstFlete = new List<FleteBE>();
            foreach (ZWEB_FLETES ls_fletes in lt_fletes)
            {
                objFlete = new FleteBE();
                objFlete.FacFlete = ls_fletes.Fflet;
                objFlete.FleCobr = ls_fletes.Fcobr;
                objFlete.FleReal = ls_fletes.Netwr;
                objFlete.FleTeorico = ls_fletes.Kbetr;
                objFlete.NonVendedor = ls_fletes.Nvend;
                objFlete.OfVentas = ls_fletes.Vkbur;
                objFlete.ValVtas = ls_fletes.Kzwi3;
                lstFlete.Add(objFlete);
            }
            return lstFlete;
        }

        /// <summary>
        /// Devuelve la lista de fletes/estibas por codigo postal para un rango de fechas 
        /// </summary>
        /// <param name="pTipoRep">Flete (06) ó Estiba (07)</param>
        /// <param name="pOficina">Oficina de ventas (si es vacío trae todas)</param>
        /// <param name="pFecIni">Fecha de inicio rango</param>
        /// <param name="pFecFin">Fecha de fin rango</param>
        /// <returns></returns>
        public List<FleteBE> ListaOpFleteEstiba(string pTipoRep, string pOficina, DateTime pFecIni, DateTime pFecFin)
        {
            PedidosProxy proxy = new PedidosProxy();
            proxy.Connection = DALC.getConnection;
            try
            {
                if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            }
            catch
            {
                throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
            }
            ZWEB_FILTROSTable lt_filtros = new ZWEB_FILTROSTable();
            ZWEB_FILTROS ls_filtros = new ZWEB_FILTROS();

            ls_filtros.Field = "FECHA";
            ls_filtros.Sign = "I";
            ls_filtros.Option0 = "BT";
            ls_filtros.Low = ParametroDALC.dateNetToSap(pFecIni);
            ls_filtros.High = ParametroDALC.dateNetToSap(pFecFin);
            lt_filtros.Add(ls_filtros);
            if (pOficina != "")
            {
                ls_filtros.Field = "CENTR";
                ls_filtros.Sign = "I";
                ls_filtros.Option0 = "EQ";
                ls_filtros.Low = pOficina;
                lt_filtros.Add(ls_filtros);
            }
            ZWEB_CODPOS_FLETESTable lt_fletes = new ZWEB_CODPOS_FLETESTable();
            proxy.Zweb_Reporte_Fletes_Codpos(pTipoRep, ref lt_filtros, ref lt_fletes);
            SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            proxy.Connection = null;
            FleteBE objFlete = null;
            List<FleteBE> lstFlete = new List<FleteBE>();

            foreach (ZWEB_CODPOS_FLETES ls_fletes in lt_fletes)
            {
                objFlete = new FleteBE();
                objFlete.OfVentas = ls_fletes.Post_Code1;
                objFlete.PesoBruto = ls_fletes.Brgew;
                objFlete.FleTeorico = ls_fletes.Kbetr;
                objFlete.FleReal = ls_fletes.Netwr;
                objFlete.FacFlete = ls_fletes.Fflet;
                objFlete.ValVtas = ls_fletes.Kzwi3;
                objFlete.FleCobr = ls_fletes.Fcobr;
                lstFlete.Add(objFlete);
            }
            return lstFlete;
        }


        public List<PedidoPosBE> ListaPendDesp(string pNumPedido, DateTime pFecIni, DateTime pFecFin, string pCodAsesor,
                                               string pOrgVentas, string pCanalDist, string pOfVentas)
        {
            PedidosProxy p = new PedidosProxy();
            p.Connection = DALC.getConnection;
            try
            {
                if (!p.Connection.IsOpen) { p.Connection.Open(); }
            }
            catch
            {
                throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
            }
            //--- falta llamado a función zweb_pedpenddesp...
            ZWEB_PENDDESPTable lt_pedidos = new ZWEB_PENDDESPTable();
            p.Zweb_Lista_Penddesp(ParametroDALC.dateNetToSap(pFecFin), ParametroDALC.dateNetToSap(pFecIni), pCodAsesor, pNumPedido, pOfVentas, pOrgVentas, pCanalDist, ref lt_pedidos);
            //---
            SAP.Connector.SAPConnectionPool.ReturnConnection(p.Connection);
            p.Connection = null;

            PedidoPosBE objPedidoPos;
            List<PedidoPosBE> lstPedidoPos = new List<PedidoPosBE>();
            foreach (ZWEB_PENDDESP ls_pedidos in lt_pedidos)
            {
                objPedidoPos = new PedidoPosBE();
                objPedidoPos.NumPedido = ls_pedidos.Vbeln;
                objPedidoPos.CodCliente = ls_pedidos.Kunnr;
                objPedidoPos.NomCliente = ls_pedidos.Name1;
                objPedidoPos.RucCliente = ls_pedidos.Stcd1;
                objPedidoPos.FecPedido = ParametroDALC.dateSapToNet(ls_pedidos.Erdat);
                objPedidoPos.PosNr = ls_pedidos.Posnr;
                objPedidoPos.CodMaterial = ls_pedidos.Matnr;
                objPedidoPos.NomMaterial = ls_pedidos.Maktx;
                objPedidoPos.CantPed = ls_pedidos.Wmeng;//pedida
                objPedidoPos.CantConf = ls_pedidos.Bmeng;//confirmada
                objPedidoPos.CantPend = ls_pedidos.Omeng;//pendiente
                objPedidoPos.FecReparto = ParametroDALC.dateSapToNet(ls_pedidos.Edatu);
                lstPedidoPos.Add(objPedidoPos);
            }

            return lstPedidoPos;
        }

        public List<InstalaBE> ListadoInstalacion(string pNumDoc)
        {
            PedidosProxy proxy = new PedidosProxy();
            proxy.Connection = DALC.getConnection;
            try
            {
                if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            }
            catch
            {
                throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
            }


            ZWEB_INSTALATable lt_instala = new ZWEB_INSTALATable();
            proxy.Zweb_Reporte_Inst(pNumDoc, ref lt_instala);
            SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            proxy.Connection = null;

            InstalaBE objInstala = null;
            List<InstalaBE> lstInstala = new List<InstalaBE>();
            foreach (ZWEB_INSTALA ls_instala in lt_instala)
            {
                objInstala = new InstalaBE();
                objInstala.ZcodServ = ls_instala.Zcodserv;
                objInstala.Material = ls_instala.Maktx;
                objInstala.Cantidad = ls_instala.Kwmeng;
                objInstala.Unidad = ls_instala.Meins;
                objInstala.Zprecio = ls_instala.Zprecio;
                objInstala.Total = ls_instala.Total;
                objInstala.Texto = ls_instala.Texto;
                lstInstala.Add(objInstala);
            }
            return lstInstala;
        }

        /// <summary>
        /// Valida que la copia sea permitida
        /// </summary>
        /// <param name="pNumDoc">Número de documento Original</param>
        /// <param name="pTipoDoc">Tipo de documento a crear</param>
        /// <returns>S = si se puede  N = No se puede</returns>
        public string validaCopia(string pNumDoc, string pTipoDoc)
        {
            ParametrosProxy proxy = new ParametrosProxy();
            proxy.Connection = DALC.getConnection;
            try
            {
                if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            }
            catch
            {
                throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
            }
            string pReturn = string.Empty;
            proxy.Zweb_Valida_Copia(pTipoDoc, pNumDoc.PadLeft(10, '0'), out pReturn);

            if (pReturn.Equals(""))
                pReturn = "N";

            SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            proxy.Connection = null;

            return pReturn;
        }

        #region IPedidoDALC Members

        //public List<PedidoBE> listaPedidoCabeceraDetalle(string pNumDoc, string pCodUsuario, 
        //    DateTime pFecInicio, DateTime pFecFin, string pOrgVtas, string pCanal, string pOficina, 
        //    string pRefLegal, string pMatrn, string pNombCli, string pStceg, string pDescMater, string pCodCli, out List<DetalleBE> lstPedidoDetalle)
        //{
        //    List<PedidoBE> lst = new List<PedidoBE>();
        //    lstPedidoDetalle = new List<DetalleBE>();
        //    return lst;
        //}

        #endregion
        #region IPedidoDALC Members


        public List<PedidoCabeceraBE> listaPedidoCabeceraDetalle(string pNumDoc, string pCodUsuario, DateTime pFecInicio, DateTime pFecFin, string pOrgVtas, string pCanal, string pOficina, string pRefLegal, string pMatrn, string pNombCli, string pStceg, string pDescMater, string pCodCli, out List<PedidoDetalleBE> lstPedidoDetalle, string pTipoDocumento)
        {
            throw new NotImplementedException();
        }

        #endregion
    }
}
